[advajax] Grupowanie wywołań

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 :(

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

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

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++;
                        }
                });
        }

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