Article View: pl.comp.lang.javascript
Article #50600Re: Problem z funkcją otwierającą plik
From: Szyk
Date: Tue, 01 Mar 2011 13:48
Date: Tue, 01 Mar 2011 13:48
79 lines
3894 bytes
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-mailReferences:
<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