Thread View: pl.comp.lang.javascript
10 messages
10 total messages
Started by Technolog
Tue, 01 Mar 2011 11:53
Problem z funkcją otwierającą plik
Author: Technolog
Date: Tue, 01 Mar 2011 11:53
Date: Tue, 01 Mar 2011 11:53
38 lines
2092 bytes
2092 bytes
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.
Gdy w linijce z //!!!! zamienię p=... na alert(... wtedy wynik się pojawia.
Jednak p chyba nie jest globalne, mimo deklaracji na początku skryptu.
Co poszło źle? 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();
Re: Problem z funkcją otwierającą plik
Author: 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();
Re: Problem z funkcją otwierającą plik
Author: Jacek Czerwinski
Date: Wed, 02 Mar 2011 05:59
Date: Wed, 02 Mar 2011 05:59
13 lines
1453 bytes
1453 bytes
W dniu 2011-03-01 14:48, Szyk pisze: > 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". Albo wynik "wykonania programu z pliku na serwerze", nie sadzisz? Z prawdziwym plikiem tu nie ma ZADNEGO kontaktu. Bosch, "praktycy" ...
Re: Problem z funkcją otwierającą plik
Author: Szyk
Date: Wed, 02 Mar 2011 12:45
Date: Wed, 02 Mar 2011 12:45
16 lines
1940 bytes
1940 bytes
W dniu 2011-03-02 06:59, Jacek Czerwinski pisze: > W dniu 2011-03-01 14:48, Szyk pisze: >> 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". > Albo wynik "wykonania programu z pliku na serwerze", nie sadzisz? > Z prawdziwym plikiem tu nie ma ZADNEGO kontaktu. Użyłem skrótu myślowego, bo z technicznego punktu widzenia nie ma żadnej różnicy czy się pobiera plik statyczny czy wynik działającego programu czyli plik generowany dynamicznie. Więc po co zaciemniać?
Re: Problem z funkcją otwierającą plik
Author: Jacek Czerwinski
Date: Wed, 02 Mar 2011 18:54
Date: Wed, 02 Mar 2011 18:54
43 lines
3024 bytes
3024 bytes
W dniu 2011-03-02 13:45, Szyk pisze: > W dniu 2011-03-02 06:59, Jacek Czerwinski pisze: >> W dniu 2011-03-01 14:48, Szyk pisze: >>> 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". >> Albo wynik "wykonania programu z pliku na serwerze", nie sadzisz? >> Z prawdziwym plikiem tu nie ma ZADNEGO kontaktu. > > Użyłem skrótu myślowego, bo z technicznego punktu widzenia nie ma żadnej > różnicy czy się pobiera plik statyczny czy wynik działającego programu > czyli plik generowany dynamicznie. Więc po co zaciemniać? > Dla mnie zaciemnianiem jest nazywanie tego plikiem. Nie zmienia mojego myslenia, że dziesiatki ludzi uzywaja belkotkliwego jezyka. Plik mozna pobrac z serwera plikow (Win,Novell,NFS,Samba itd) choc i tu teoretycy by dyskutowali. Otwierasz go w/g 'handle' itd. Paradoksalnie, FTP wbrew nazwie, tez by mozna dyskutowac. Plik generowany dynamicznie (?) cokolwiek by to dla Ciebie znaczylo, to jakies Unixowe rurki, pipe itd, ale to sa bardzo wyraziste w informatyce rzeczy od 30 lat. Ale nawet pipe, choc ma zmienna zawartosc, ale konkretna tozsamosc. To co jest w request http, nie musi odpowiadac zadnemu plikowi, obsluzone przez handlery serwera. Wiec jaki plik wtedy pobierasz? htpp://xxxx/status -> jaki to plik ? A jak serwer www oddaje wyniki kwerend SQL - jaki to plik? Nie mam gotowego slowa, jak by nazwac taki abstrakcyjny byt, uogólnienie statycznego czy dynamicznego wyniku skryptu, moze 'strumien', ale bez przekonania. Ale zdecydowanie slowa z http. Nawet pehapowcowi da sie to wytlumaczyc: pobranie PLIKU to juz blizsze by bylo ujawnienie jego postaci zrodlowej skryptu zamiast wyniku, np. jak sie spieprzy konfiguracja apacha.
Re: Problem z funkcją otwierającą plik
Author: Szyk
Date: Wed, 02 Mar 2011 19:57
Date: Wed, 02 Mar 2011 19:57
32 lines
2754 bytes
2754 bytes
> To co jest w request http, nie musi odpowiadac zadnemu plikowi, > obsluzone przez handlery serwera. Wiec jaki plik wtedy pobierasz? > htpp://xxxx/status -> jaki to plik ? Ja nie jestem żadnym wielkim "ŁU ŁU Teoretykiem" ale chyba cały trik polega na tym, że podaje się URL w przeglądarce i przeglądarka odbiera to jako plik. A w tym konkretnym przypadku to status może być jakimkolwiek plikiem html czy txt czy jeszcze czymś innym. > A jak serwer www oddaje wyniki kwerend SQL - jaki to plik? Wyniki kwerend SQL nie mają nic do rzeczy - to wewnętrzne sprawy serwera. Interfejs www musi definiować odrębny format jaki udostępnia np. xml, czy cvs. > Nawet pehapowcowi da sie to wytlumaczyc: pobranie PLIKU to juz blizsze > by bylo ujawnienie jego postaci zrodlowej skryptu zamiast wyniku, np. > jak sie spieprzy konfiguracja apacha. To że plik udostępniany w locie generuje wynikową zawartość to sprawa jedynie serwera www i jego możliwości w tym zakresie. Użytkownika to nie obchodzi, czy plik jest statyczny czy generowany w locie (dynamicznie). Użytkownik przeglądarką pobiera pliki. Serwer taki jak Apache pierwotnie serwował tylko statyczne pliki, a skrypty zostały do niego dodane później. Tym nie mniej przeglądarki dalej odbierają pliki. Taka uwaga na koniec: radzę myśleć prostymi pojęciami tam gdzie sprawy są proste, bo to dobrze robi na bańkę. Błądzenie w nie forułowalnych czy nie wysławialnych abstrakcjach radzę zostawić humanistom (czyli tym co nie potrafią nic zrobić ale się uważają za ekspertów od spraw wyższych).
Re: Problem z funkcją otwierającą plik
Author: Jacek Czerwinski
Date: Wed, 02 Mar 2011 20:18
Date: Wed, 02 Mar 2011 20:18
4 lines
1195 bytes
1195 bytes
W dniu 2011-03-02 20:57, Szyk pisze: > Tym nie mniej przeglądarki dalej odbierają pliki. > NIE
Re: Problem z funkcją otwierającą plik
Author: Jacek Czerwinski
Date: Wed, 02 Mar 2011 20:20
Date: Wed, 02 Mar 2011 20:20
6 lines
1321 bytes
1321 bytes
W dniu 2011-03-02 21:18, Jacek Czerwinski pisze: > W dniu 2011-03-02 20:57, Szyk pisze: >> Tym nie mniej przeglądarki dalej odbierają pliki. >> > NIE Polecam lekturze cztery literki, dwukropek i dwa ukosniki.
Re: Problem z funkcją otwierającą plik
Author: William Bonawentura
Date: Thu, 03 Mar 2011 06:44
Date: Thu, 03 Mar 2011 06:44
12 lines
1629 bytes
1629 bytes
? Użytkownik "Jacek Czerwinski" <x@y.z.pl> napisał w wiadomości news:ikm3pa$2jl$1@news.onet.pl... > > Nie mam gotowego slowa, jak by nazwac taki abstrakcyjny byt, uogólnienie > statycznego czy dynamicznego wyniku skryptu, moze 'strumien', ale bez > przekonania. Ale zdecydowanie slowa z http. > To co wysyłamy i czytamy z protokołu http to zdecydowanie strumień (stream). To, co otrzymujemy tym strumieniem to treść (content). W szczególnym przypadku może być to zawartość jakiegoś pliku (file).
Re: Problem z funkcją otwierającą plik
Author: Technolog
Date: Thu, 03 Mar 2011 19:07
Date: Thu, 03 Mar 2011 19:07
23 lines
1989 bytes
1989 bytes
Dnia Tue, 01 Mar 2011 14:48:01 +0100, Szyk napisał(a): >> 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.). No jasne, w tym momencie zrozumiałem. > 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. Chyba sobie już poradzę, przynajmniej zrozumiałem problem. Ewentualnie może prościej mi będzie sprawdzać zawartość tej zmiennej przez setInterval. Wielkie dzięki za pomoc! Pozdrawiam
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads