Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z AJAX, Jak poczekac az wywolanie AJAX sie skonc
bigu
post 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
Go to the top of the page
+Quote Post
anAKiN
post 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/
Go to the top of the page
+Quote Post
bigu
post 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?
Go to the top of the page
+Quote Post
anAKiN
post 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/
Go to the top of the page
+Quote Post
bigu
post 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...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 17:33