[advajax] Grupowanie wywołań

Odpowiedz Nowy wątek
2006-09-01 18:18
0

Tworze stronę z użyciem advajaksa.

Zaistniała potrzeba wysłania w pętli kilku wywołań. Zrobiłem to i okazało się ze wracają one w przypadkowej kolejności (trzecie pierwsze drugie etc.), co jest mi bardzo nie na rękę.

Na stronie advajaksa w rozdziale "008 Grupowanie wywołań" jest coś o tym ale nie rozumiem jak to działa.. może mi ktoś wytłumaczyć ten rozdział albo pomóc przerobić poniższy kod aby działał "synchronicznie":

    for (var i = 3; i < fillForm.arguments.length; i++)
    {
        query = "field=" + fillForm.arguments[i];
 
        advAJAX.post({ url: "admin.php", 
            parameters : {
                "post_data" : "fillForm",
                "dbTable" : dbTable,
                "resId" : resId
            },
            queryString : query,
            onSuccess : function(obj) {
                progress ("Gotowe!", false);
                //alert(obj.responseText); 
                inputs[iid].value = obj.responseText; //to jest tekst zwrócony przez php, wazna jest kolejność w jakim bedzie "wracał" tymczasem jest ona przypadkowa...
                iid++;
            }
        });
    }

Dzisiaj nauczyłem się sporo js, zastosowałem pierwszy raz ajaxa, na synchronizacje wywołań po prostu nie mam już siły :(


<url>http://kooba.pl/</url>

Pozostało 580 znaków

2006-09-01 19:47
0

chodzi chyba o to żeby dodać dodatkowy parametr
group - czyli zamiast np:

advAJAX.get({ url: "http://www.example.com/page1.html" });

dać:

advAJAX.get({
url: "http://www.example.com/page1.html",
group: "grupa pierwsza"
});

lub ustawić:

advAJAX.setDefaultParameters({ group : "grupa pierwsza" });

wtedy dla wszystkich wywołań następnych będzie ustawiona domyślnie ta nazwa grupy, a ustawienie grupy daje to że pytania są zgrupowane i otrzymujesz dodatkowe zdarzenie onGroupLeave które wykonuje się po wykonaniu wszystkich zapytań w grupie

jednak nie masz kontroli nad tym w której kolejności wykonają się poszczególne zadania w grupie, bo np zobacz: otwierasz trzy okna przeglądarek z 4p.net - ta która się otworzy pierwsza może się załadować ostatnia i nie masz nad tym kontroli, chyba że PO wykonaniu pierwszego otworzysz drugie, tj. musiałbyś albo w onSuccess pierwszego wystartować drugi itd. albo w przypadku wykonania drugiego i nie gotowego pierwszego oczekiwać na zakończenie pierwszego nim się zacznie jakaś tam procedura

powyższe bym zapisał tak (niesprawdzane):

    advAJAX.setDefaultParameters({
        url: 'admin.php',
        parameters : {
            "post_data" : "fillForm",
            "dbTable" : dbTable,
            "resId" : resId
        },
        onSuccess : function(obj) {
            progress ("Gotowe!", false);
            //alert(obj.responseText); 
            inputs[obj.tag].value = obj.responseText;   
        }
    });
    for (var i = 3; i < fillForm.arguments.length; i++)
    {
        advAJAX.post({
            queryString : 'field=' + fillForm.arguments[i],
            tag: iid++
        });
    }

ale ja bym się zastanowił nad czymś takim jak przekazywanie admin.php danych które chce się uzyskać a potem parsowania dokumentu XML i zrobienia tego w jednym zapytaniu


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-09-02 14:49
0

po prostu to group daje tyle ze zaczynasz prace z danymi w ongroupleave a nie onsucces ? chyba mniejwiecej rozumiem..

a rozwiazanie ktore proponujesz - własnie chcialem go uniknąć, bo przy mojej budowie szablonów było by to niewygodne.

ale tak czy siak musze przebudować skrypt


<url>http://kooba.pl/</url>

Pozostało 580 znaków

2006-09-02 17:19
nav
0

Może:

        var wait=false;
        for (var i = 3; i < fillForm.arguments.length; i++)
        {
                query = "field=" + fillForm.arguments[i];
                while (wait);
                advAJAX.post({ url: "admin.php",
                        parameters : {
                                "post_data" : "fillForm",
                                "dbTable" : dbTable,
                                "resId" : resId
                        },
                        queryString : query,
                        onLoading : function(obj) {wait=true;},
                        onSuccess : function(obj) {
                                wait=false;
                                progress ("Gotowe!", false);
                                //alert(obj.responseText);
                                inputs[iid].value = obj.responseText; //to jest tekst zwrócony przez php, wazna jest kolejność w jakim bedzie "wracał" tymczasem jest ona przypadkowa...
                                iid++;
                        }
                });
        }

utf-8 rlz! ٩(ಥ_ಥ)۶

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0