Problem z AJAX, Jak poczekac az wywolanie AJAX sie skonc |
Problem z AJAX, Jak poczekac az wywolanie AJAX sie skonc |
15.05.2006, 11:50:07
Post
#1
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 7.06.2005 Ostrzeżenie: (0%) |
Kod var ajax_request=false; function AjaxConnect(url,data) { //var datex=data.login.value; ajax_request=false; if(window.XMLHttpRequest) { ajax_request=new XMLHttpRequest(); if(ajax_request.overrideMimeType) { ajax_request.overrideMimeType('text/xml'); } } else if(window.ActiveXObject) { try { ajax_request=new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { ajax_request=new AxtiveXObject("Microsoft.XMLHTTP"); } catch(e) { //false } } } if(!ajax_request) { document.getElementById("log_msg").innerHTML ='Nie można wywołać AJAX'; return false; } url=url+data; ajax_request.onreadystatechange=wynik_form; ajax_request.open('POST',url,true); ajax_request.send(null); } function wynik_form() { if(ajax_request.readyState==4) { if(ajax_request.status==200) { alert("1"); } else { document.getElementById("log_msg").innerHTML ='Błąd zapytania AJAX'; } } } function waliduj_form() { if(login_form.logowanie.value!='') { this.sprawdz=0; var formularz="?form=login&login="+login_form.login.value+"&password="+login_form.password.value; AjaxConnect('walidacja_form.php',formularz); alert("2"); } else { alert('Zly form'); } } Teraz tak, powyzszy kod wypisuje mi okienka alert, najpierw 2 a pozniej 1. Choc alert("2"); ustawiony jest po wywolaniu funkcji AjaxConnect, niby ona sie konczy bo zostaje wywolane open i send, ale nie zwraca jeszcze wynikow - alert("2"); Co zrobic by po wywolaniu funkcji AjaxConnect('walidacja_form.php',formularz); program musial czekac az zostanie wykonane do konca wywolanie AJAX. Chcialbym zeby wyswietlilo 1, 2 |
|
|
15.05.2006, 12:35:35
Post
#2
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 15.07.2003 Ostrzeżenie: (0%) |
Wywołanie AJAX-a jest asynchroniczne, więc to normalne, że otrzymujesz 2, 1. Wartość readyState=4 wywoływana jest wyłącznie raz, więc równie dobrze mógłobyś umieścić alert(2) poniżej alert(1). Możesz także skorzystać z AdvancedAJAX:
Kod advAJAX.get({
url : 'walidacja_form.php', parameters : { form : 'login', login : login_form.login.value, password : login_form.password.value }, onSuccess : function(obj) { // alert(obj.responseText); alert(1); }, onFinalization : function() { alert(2); } }); -------------------- Łukasz Lach
http://anakin.us/ |
|
|
15.05.2006, 12:44:24
Post
#3
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 7.06.2005 Ostrzeżenie: (0%) |
Hmmm...nie wiem czy to akurat mi pomoze, bo moje zalozenie jest takie, ze funkcja wynik_form() ma zwaracac true albo false.
Po co? <form method="post" name="login_form" onSubmit="return waliduj_form(this.form)"> Zebym zwalidowal formularz. Dlatego chce miec juz w funkcji waliduj_form() wartosc zwrocona przez wywolanie ajax, bo np. jezeli responseText zwroci mi wartosc 1, to wtedy waliduj_form zwroci true; Ale nie moge tego zrobic bo funkcja waliduj_form() sie konczy zanim AJAX sie wykona. To jak inaczej to rozwiazac z onSubmit? |
|
|
15.05.2006, 12:56:23
Post
#4
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 15.07.2003 Ostrzeżenie: (0%) |
Nie bede pisal calego kodu, ale mozesz to osiagnac znacznie prosciej korzystajac z AdvancedAJAX. Wykorzystujac metode assign przy <body onload..> mozesz dolaczyc funkcjonalnosc obiektu do formularza. Przed wywolaniem AJAX-a zostanie jednak wywolana funkcja umieszczona w onsubmit, jesli zwroci false, to wywolanie AJAX-a w ogole nie bedzie wykonane. Jesli natomiast zwroci true, AdvancedAJAX utworzy lancuch rzadania ze wszystkich pol formularza, zablokuje jego kontrolki i wywola odpowiednia strone. Skladnia advAJAX.assign() jest podobna do powyzszej, z ta roznica, ze musisz ponadto przekazac obiekt formularza - a jesli tak, to korzystajac z onFinalization (onSuccess) uzyskasz moment, w ktorym i wewnetrzne sprawdzenie formularza przez JS i wywolanie AJAX-a sie zakonczylo.
Pelny opis masz na stronie projektu: http://advajax.anakin.us/index-pl.htm. Jesli chce ci sie pisac cos takiego od zera, to korzystajac z powyzszego opisu nie powinno byc problemu... -------------------- Łukasz Lach
http://anakin.us/ |
|
|
15.05.2006, 16:47:10
Post
#5
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 7.06.2005 Ostrzeżenie: (0%) |
Hej, zrobilem juz to po swojemu i dziala, aleeeee...wlasnie nie dziala, bo napotkalem nowy problem. Pod IE wszystko chodzi cool, ale jak wlaczam Opere albo Firefoxa nie dziala, readyState=1...downloading...
|
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 17:33 |