🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.javascript
Article #50600

Re: Problem z funkcją otwierającą plik

#50600
From: Szyk
Date: Tue, 01 Mar 2011 13:48
79 lines
3894 bytes
W dniu 2011-03-01 12:53, Technolog pisze:
> Witam, mam funkcję, która otwiera mi plik PHP - jak do tej pory działa,
> plik jest wykonywany.

> Tylko nie potrafię zmusić tej funkcjo do tego, aby
> zwróciła wynik otwarcia pliku.

Bo to nie jest "wynik otwarcia pliku" tylko "wynik pobrania pliku".

> Gdy w linijce z //!!!! zamienię p=... na alert(... wtedy wynik się pojawia.

Bo to logiczne. Plik pobierany jest asynchronicznie. Mówiąc po ludzku: 
jedna funkcja wysyła żądanie pobrania pliku, a druga funkcja go odbiera. 
Robi się tak by interfejs użytkownika działał mimo pobierania pliku 
(inaczej była by zwiecha na sekundę lub kilka sek.). W twoim wypadku 
wysyłasz żądanie pobrania pliku funkcją:
 > function fileOpen (addr) {

a odbiera funkcja:

 > 	XMLHttpRequestObject.onreadystatechange = function()	{

Tu ta funkcja podawana jest jako parametr wywołania. Jest to tzw. 
"funkcja callback". Bardzo często się stosuje takie rozwiązanie. Po 
drugie jest to funkcja nie nazwana czyli tzw. "funkcja Lambda" (nie 
wszystkie języki to mają).

> Jednak p chyba nie jest globalne, mimo deklaracji na początku skryptu.

Odczytujesz p gdy plik jeszcze nie został ściągnięty.

>
> Co poszło źle?

Tam gdzie masz //!!!!!!!!!!!!! trzeba umieścić to co ma się dziać po 
pobraniu pliku. W twoim przypadku zapewne najlepiej było by gdyby do 
funkcji fileOpen dodać parametr będący funkcją jaka ma być wywołana po 
pobraniu pliku z parametrem zawartości pobranego pliku. Wtedy miałbyś 
uniwersalny sposób pobierania dowolnego pliku.

Jeszcze raz jakbyś miał wątpliwości: trzeba dodać do fileOpen drugi 
parametr będący nazwą funkcji jaka ma być wywołana po pobraniu pliku i 
wywołać ją tam gdzie są //!!!!!!!!!!!!! z parametrem p. Wtedy zawartość 
pliku wyląduje tam gdzie chcesz ją umieścić. Mógłbym to napisać, ale nie 
mam za bardzo czasu.



> Przyznaję, że nie poruszam się swobodnie w programowaniu
> obiektowym ani w AJAX, a funkcję fileOpen gdzieś podpatrzyłem i do pewnego
> momentu mi ona działa, ale nie zwraca wyniku.
>
> Będę wdzięczny za pomoc.
>
> var p='';
> function fileOpen (addr) {
> 	var XMLHttpRequestObject = false;
> 	if (window.XMLHttpRequest){
> 	  XMLHttpRequestObject = new XMLHttpRequest();
> 	}
> 	else if (window.ActiveXObject){
> 	  XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
> 	}
>    if(XMLHttpRequestObject){
> 	XMLHttpRequestObject.open("GET", addr);
> 	XMLHttpRequestObject.onreadystatechange = function()	{
> 	  if (XMLHttpRequestObject.readyState == 4&&
> 		XMLHttpRequestObject.status == 200) {
> 		  p= XMLHttpRequestObject.responseText; //!!!!!!!!!!!!!
> 	  }
> 	}
> 	XMLHttpRequestObject.send(null);
> 	return p;
>    }
> }
> function test () {
> 	alert(fileOpen("plik.php"));	
> }
> test();
Technical Details
Message-ID: <4d6cf90f$0$2449$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <n4j0k7vyayz5.dy6aj5uf45kg.dlg@40tude.net>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Date: Tue, 01 Mar 2011 14:48:01 +0100
From: Szyk <szyk100@o2.pl>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.13) Gecko/20101207 Thunderbird/3.1.7
MIME-Version: 1.0
Newsgroups: pl.comp.lang.javascript
Subject: Re: Problem z funkcją otwierającą plik
References: <n4j0k7vyayz5.dy6aj5uf45kg.dlg@40tude.net>
In-Reply-To: <n4j0k7vyayz5.dy6aj5uf45kg.dlg@40tude.net>
Lines: 80
Message-ID: <4d6cf90f$0$2449$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 83.30.76.213
X-Trace: 1298987279 unt-rea-a-01.news.neostrada.pl 2449 83.30.76.213:1486
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit