[rešeno] [php/ajax] dva sočasna klica ajax

1GOR Član
uredil/-a 28. October, 2010 v Programiranje
Živjo!
Ustvarjam spletni vmesnik za poganjanje nekih skript!
Zanima me pa nekaj v zvezi z ajax-om. Z ajax klicem zaženem neko bash skripto, ki lahko traja do več minut, ker bi rad uporabniku sporočal stanje, z več zaporednimi klici(na intervalu 1 sekunde) gledam stanje neke datoteke (katero spreminja skripta ki je bila najprej zagnana), stanje se mi v redu prikazuje, rezultat prvega klica(klic skripte) pa nikoli ne prispe!
Na strežniku sta oba klica v eni php skripti, v javascript-i pa je
onreadystatechange
funkcija ista s tem, da preko oblike niza ki ga dobi razpozna klic.
Zanima me pa če je to normalno da se rezultat prvega klica ajax izgubi, če ga drugi klic(ki se je začel kasneje) prehiti.

Če poskusim razložiti še z časovnim intervalom:
ajax klic-zagon skripte: |------------------------------------------------------------------------------->
ajax klic-preverjanje stanja: |-----> |------> |------> |------>

| začetek klica
- izvajanje
> konec klica

rezultat klica-zagon skripte se izgubi.

Najlepša hvala za vaše odgovore!

lp:1GOR

Komentarji

  • Pomagalo bi, če bi videli funkciji, ki pošljeta zahtevo in izpišeta rezultat, brez podatkov o strežniku...
  • javascript:

    var httpObject=null;
    //funkcija ki pridobi httpObject
    function getHTTPObject()
    {
    if(window.ActiveXObject)
    return new ActiveXObject('Microsoft.XMLHTTP');
    else if(window.XMLHttpRequest)
    return new XMLHttpRequest();
    else
    {
    alert(\"Your browser does not support AJAX\");
    return null;
    }
    }
    //funkcija ki se izvede na odziv strežnika
    function setOutput()
    {
    if(httpObject.readyState == 4)
    {
    var text=httpObject.responseText.split(\"::\");
    if(text[0] == \"1\")
    {
    document.getElementById(\"hh\").innerHTML=text[1];
    }
    else if(text[0] == \"2\")
    ....
    else if(text[0] == \"6\")
    {
    document.getElementById(\"status\").innerHTML=text[1];
    }
    }
    }
    //funkcija ki ustvari ajax post zahtevo
    function ajax(arg)
    {
    httpObject=getHTTPObject();
    if(httpObject != null)
    {
    httpObject.open('POST', 'ajax.php?', true);
    httpObject.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");
    httpObject.setRequestHeader(\"Content-length\", arg.length);
    httpObject.setRequestHeader(\"Connection\", \"close\");
    httpObject.onreadystatechange=setOutput;
    httpObject.send(arg);
    }
    }


    php(ajax.php):

         if(isset($_POST['start']))
    {
    echo '1::';
    echo execute(\"191.168.0.44\", $_POST['start']);


    }
    elseif(isset($_POST['scene']))
    ...
    elseif(isset($_POST['status']))
    {
    echo '6::';
    //execute je moja funkcija ki uprablja knjižnico phpseclib za poganjanje
    //shell skript na oddaljenem računalniku
    echo execute('191.168.0.44', 'cat pot_do_direktorija/running_addresses.txt | tail -n 1');
    }
    else
    {
    echo \"none\";
    }


    Upam da bo kaj pomagalo!
    Poudaril bi samo, da 'status' deluje, medtem ko start ne deluje, če je klican status!
    In še nekaj, puščam možnost da ni nič narobe in samo klic status prepreči vračilo klica start, sicer pa ne vem točno kako to deluje ker sem komaj začel z php/javascriptom!
  • Sem popravil, narobe je bilo da sem uporabili isto spremenljivko httpObject, ter isto onreadystatechange funkcijo (setOutput) za oba klica!

    [rešeno]
  • bl4z Član Ubuntu.si
    1gor // sej je super da uporabljas goli javascript amak ce bi uporabu jQuery (ali kaj podobnega) bi imel to reseno v 5ih vrsticah
Za komentiranje se prijavite ali pa se vpišite.