Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

AJAX synchronous poziv ne radi u mozilli?

[es] :: Javascript i AJAX :: AJAX synchronous poziv ne radi u mozilli?

[ Pregleda: 2905 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kukipei
Niš

Član broj: 19564
Poruke: 164
212.200.220.*

Sajt: www.bestbetinfo.com


Profil

icon AJAX synchronous poziv ne radi u mozilli?08.09.2006. u 21:38 - pre 214 meseci
Pozdrav svima.

Koristim sledeci kod pri radu sa AJAX-om:
Code:

function handleHttpResponse() 
{
    if (http.readyState == 4) 
    { 
      if(http.status==200) 
      { 
        var results=http.responseText;
        if (navig == 1)
            ObradiNavigator1(results);
        if (navig == 2)
        {
            ObradiNavigator2(results);
        }
        return;
      } 
    } 

function Start(nav, zapretragu)
{
    var metod = true;
    navig=nav;
    if (nav == 1)
    {
        url = "navigator1.php";
    }
    if (nav == 2)
    {
        metod = false;
        url = "navigator2.php?slovo="+zapretragu;
    }
    http.open("GET", url, metod);
    http.onreadystatechange = handleHttpResponse; 
    http.send(null); 

function getHTTPObject() 

    var xmlhttp; 
    try 
    {
        xmlhttp = new XMLHttpRequest();
      }
    catch (trymicrosoft)
    {
        try
        {
              xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (othermicrosoft)
        {
            try
            {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (failed)
            {
                xmlhttp = false;
              }
        }
      }
    if (!xmlhttp)
        alert("Error initializing XMLHttpRequest!");
    return xmlhttp; 

var http = getHTTPObject(); // We create the HTTP Object 


E sada je bitan ovaj deo koda:
Code:

if (nav == 2)
    {
        metod = false;
        url = "navigator2.php?slovo="+zapretragu;
    }
    http.open("GET", url, metod);
    http.onreadystatechange = handleHttpResponse; 
    http.send(null); 


kada je metod = false, stranica bi trebalo da saceka izvrsenje skripte na serveru i tek onda obradi podatke (sinhronizovan poziv).

Ovo lepo radi u IE 6 i Operi 9 ali nece u Mozilli 1.5?
U cemu je problem?
Kako da u Mozilli izvrsim sinhronizovan poziv?

Pozdrav,
Predrag


[Ovu poruku je menjao kukipei dana 09.09.2006. u 15:46 GMT+1]
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
212.200.25.*

Sajt: www.novikorisnik.net


+5 Profil

icon Re: AJAX synchronous poziv ne radi u mozilli?11.09.2006. u 08:37 - pre 214 meseci
Ja ne znam, recimo da ne može :-)

No, u čemu je problem da cela priča ne može da se odvija asinhrono?

Zato se i postavlja taj onreadystatechange handler - po prijemu podataka on može da inicira obradu podataka.
 
Odgovor na temu

kukipei
Niš

Član broj: 19564
Poruke: 164
*.adsl.sezampro.yu.

Sajt: www.bestbetinfo.com


Profil

icon Re: AJAX synchronous poziv ne radi u mozilli?11.09.2006. u 09:16 - pre 214 meseci
Citat:
noviKorisnik
No, u čemu je problem da cela priča ne može da se odvija asinhrono?



Pa dobro, moze da se odvija i asinhrono, ali ja sam ipak hteo da se sacekaju podaci sa servera a da za to vreme user ne moze nista da radi. Ali moze i ovako. Nije toliko strasno.

Pozdrav.
 
Odgovor na temu

Gojko Vujovic
Amsterdam, NL

Administrator
Član broj: 1
Poruke: 13651



+165 Profil

icon Re: AJAX synchronous poziv ne radi u mozilli?11.09.2006. u 09:32 - pre 214 meseci
Poenta tog asinhronog je što stranica deluje interaktivnije, barem ja to tako shvatam. Treba baš da imaš specifične potrebe pa da bežiš od toga. Ako te brine da ne klikne još nešto za vreme učitavanja, disejbluj te kontrole javascriptom.
 
Odgovor na temu

kukipei
Niš

Član broj: 19564
Poruke: 164
*.adsl.sezampro.yu.

Sajt: www.bestbetinfo.com


Profil

icon Re: AJAX synchronous poziv ne radi u mozilli?11.09.2006. u 16:51 - pre 214 meseci
http://www.gensunasumus.com/searchajax/

Ma ostavicu ga da radi asinhrono, ali ipak me interesuje zasto sinhrono ne radi u mozzili.
 
Odgovor na temu

Br@nkoR
http://localhost

Član broj: 2597
Poruke: 1603

Sajt: localhost


+23 Profil

icon Re: AJAX synchronous poziv ne radi u mozilli?11.09.2006. u 18:01 - pre 214 meseci
Nije me bilo odavno ovde. :)

Kod sinhrohog zahteva ne postoji event onreadystatechange, odnosno nikada se ne izvrši, tako da bi u ovom slučaju Start funkcija trebala da izgleda ovako:
Code:

function Start(nav, zapretragu)
{
    var metod = true;
    navig=nav;
    if (nav == 1)
    {
        url = "navigator1.php";
    }
    if (nav == 2)
    {
        metod = false;
        url = "navigator2.php?slovo="+zapretragu;
    }
    http.open("GET", url, metod);
    
    if(metod == true) {
      http.onreadystatechange = handleHttpResponse; 
    }
    
    http.send(null); 
    
    if(metod == false) {
      if(http.responseText) {
        ObradiNavigator2(http.responseText);
      }  
    }


Banned - Not available
 
Odgovor na temu

bzero
dev null
europe

Član broj: 5907
Poruke: 371
*.dynamic.sbb.co.yu.

Jabber: bzero@elitesecurity.org
Sajt: www.google.com/search?q=b..


Profil

icon Re: AJAX synchronous poziv ne radi u mozilli?11.09.2006. u 18:13 - pre 214 meseci
1. Sinhroni XMLHttpRequest definitivno radi sasvim normalno u mozilli. Da bi to proverio u tvojoj funkciji Start iskomentarisi red koji postavlja hedler za onreadystatechange i dodaj alert(http.responseText) na kraju, znaci ovako:

Code:

function Start(nav, zapretragu)
{
    var metod = true;
    navig=nav;
    if (nav == 1)
    {
        url = "navigator1.php";
    }
    if (nav == 2)
    {
        metod = false;
        url = "navigator2.php?slovo="+zapretragu;
    }
    http.open("GET", url, metod);
    //http.onreadystatechange = handleHttpResponse; 
    http.send(null); 
    alert(http.responseText);



i videces da ovo radi u mozilli i to potpuno isto kao i u ostalim browserima.

2. Razlika izmedju asinhronog i sinhronog XMLHttpRequest-a je u tome sto se kod sinhronog zaustavlja izvrsavanje bilo cega na toj strani i browser ceka dok ne dobije odgovor od servera, dok se kod asinhronog browser ne ceka, nego kada se promeni readyState poziva funkciju koja mu je data. Iz ovoga slede dve stvari: prvo, sinhroni request se apsolutno ne preporucuje (osim mozda u nekim specificnim slucajevima), jer bukvalno blokira browser, mozda se to ne oseti kada radis u lokalnoj mrezi, ali ako odgovor od servera treba duze cekati, ovo je itekako problem. Drugo, postavljanje onreadystatechange hendlera kod sinhronog requesta nema nikakvog smisla, jer ce browser ionako cekati dok se request potpuno ne zavrsi. To sto tvoj originalni primer radi u nekim browserima prakticno je zbog toga sto oni pozovu onreadystatechange funkciju i za sinhroni zahtev, a mozilla ne (sto je ustvari i ispravno).

3. Sto se tice toga da si ti hteo da se sacekaju podaci sa servera, treba da disejblujes konrole na strani dok ne dobijes ceo odgovor sa servera, kao sto je vec receno i eventualno da stavis neku indikaciju da se podaci ucitavaju, da bi korisnik znao sta se desava.
Never trust an operating system you don't have sources for.
 
Odgovor na temu

kukipei
Niš

Član broj: 19564
Poruke: 164
*.adsl.sezampro.yu.

Sajt: www.bestbetinfo.com


Profil

icon Re: AJAX synchronous poziv ne radi u mozilli?11.09.2006. u 20:39 - pre 214 meseci
OK. Hvala momci sada su mi neke stvari jasnije
 
Odgovor na temu

[es] :: Javascript i AJAX :: AJAX synchronous poziv ne radi u mozilli?

[ Pregleda: 2905 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.