Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX] Wielokrotne połączenie z serwerem
Forum PHP.pl > Forum > XML, AJAX > AJAX
Qwak
Hej!

Jakiś czas temu napisałem skrypt który w zależności od ilości danych podanych przez użytkownika czasami wykonywał się ponad limit czasu skryptu (nie, to nie było jego zadanie biggrin.gif ). Jako że nawet gdybym sobie zwiększył limit wykonywania skryptu to i tak denerwujące by było czekanie aż skrypt się wygeneruje (problemu nie da się obejśc - curl). Dlatego postanowiłem zastosować JS do wstępnej obróbki danych i potem za pomocą ajax porcjami wysyłać dane do skryptu PHP. Wykorzystuje to obiekt xmlHttpRequest. Problem w tym że nie wiem za bardzo jak się zabrać do wielokrotnego połączenia ze skryptem :/ Mam taki kod:

Kod
for (i=0;i < iMax;i++) {
        var rXmlHttp = initXmlObject();
        rXmlHttp.onreadystatechange = function(){onchange();}
        rXmlHttp.open('POST','includes/server.php',true);
        rXmlHttp.setRequestHeader('content-type','application/x-www-form-urlencoded;charset=utf-8');
        rXmlHttp.send('sStuff='+sSendContent);
        delete(rXmlHttp);
    }


function initXmlObject () {
        var rXmlHttp;
        try {
            rXmlHttp = new XMLHttpRequest();
        }
        catch (e) {
            var aXmlHttp = new Array('MSXML2.XMLHTTP.5.0',
            'MSXML2.XMLHTTP.4.0',
            'MSXML2.XMLHTTP.3.0',
            'MSXML2.XMLHTTP',
            'Microsoft.XMLHTTP');
            var bSuccess = false;
            for (var i=0;i<aXmlHttp.lenght && !bSuccess;i++) {
                try {
                    rXmlHttp = new ActiveXObject(aXmlHttp[i]);
                    bSuccess = true;
                }
                catch (e) {}
            }
            if (!bSuccess) {
               throw new error ("blad!");
            }
        }
        return rXmlHttp;
}


Funkcja onchange jest dość spora i odwołuje się do jeszcze drugiej. W tym leży chyba problem bo z moich "badań" wynika że zmienna jest wywalana przed tym jak serwer zwróci wyniki i wszystko się rozwala. Próbowałem dodać jakąś pętle która by czekała aż funkcja onchange skończy działanie ale kończyło się to epic failem ;-) przeglądarka się zapętlała.

Aha i jeszcze mam takie pytanie: czy warto się pchać w rozwiązania zastępcze takie jak iframe i cookies? Zamierzam jeszcze zrobić wersje strony która będze pozbawiona java scriptu i myśle że to wystarczy. Co o tym myślcie?

Proszę o pomoc i pozdrawiam 
erix
Lepiej zainteresuj się pobieraniem danych przez cron i zapisywaniem wyników do cache.
Qwak
Może nie wyraziłem się jasno. Użytkownik wpisuje dane do formularza, js je rozdziela na paczki i przesyla do skryptu php który za pomocą curl wykonuje na nich operacje.
flashdev
Cytat(erix @ 14.07.2009, 20:32:01 ) *
Lepiej zainteresuj się pobieraniem danych przez cron i zapisywaniem wyników do cache.


Podpisuję się pod tym stwierdzeniem i dodam jeszcze dlaczego tak powinieneś zrobić:

Ufasz w 100% w prawdziwość tych danych które dostajesz od użytkownika (client side)?
A jak ktoś Ci zrobi żart i zacznie przesyłać mase śmieci tym kanałem?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.