Terve taas täältä ajaxin opettelusta,
Tein noista putkan esimerkeistä soveltaen funkition, jolla parametreilla saadaan eri juttuja aikaiseksi.
Tässä nuo funktiot;
function KasitteleSessiot(koodi,parametri,funktio) { // Alustetaan ensin Pyynto-muuttuja kutsumalla edellä toteutettua funktiota: alustaPyynto(); // En liittnyt mukaan, kun on ihan sama kuin esimerkissä // Määritellään funktio, joka suoritetaan, kun vastaus palvelimelta on saapunut: Pyynto.onreadystatechange = funktio; // Käytetään POST-muuttujia tiedon lähettämiseen asynkronisesti // palvelimelle parametrin mukaiselle skriptille: Pyynto.open("POST", koodi, true); // Asetaan HTTP-otsake kertomaan sisällön tyyppi: Pyynto.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); // Lähetetään pyyntö palvelimelle: Pyynto.send(parametri); } function TarkistaVirhe() { // Tarkistetaan, onko pyyntö suoritettu kokonaan: if(Pyynto.readyState == 4) { // Tarkistetaan, onko pyynnön suoritus onnistunut: if(Pyynto.status == 200) { // Jos kaikki on kunnossa, käsitellään saapunut data: alert("Tarkistus "+Pyynto.responseText); } else { alert("Kyselyn suorituksessa on tapahtunut virhe!"); } } }
Kutsun tätä ajax-palikkaa javascript funktiosta, joka käynnistyys linkistä
function tyhjenna() { alert('Testi1c'); KasitteleSessiot('ajax/poistasessiot.php','posx=1&posy=1&paikka=1',TarkistaVirhe); alert('Testi2c'); KasitteleSessiot('ajax/talletasessioon.php','kayta=k',TarkistaVirhe); }
Ongelma: Ensimmäinen KasitteleSessiot-kutsu toimii aina ok eli paluuarvo funktiossa TarkistaVirhe on ok. Jälkimmäinen kaatuu aina johonkin virheeseen eli Status <> 200. Jos jompi kumpi kutsuista on yksin toimii ok ja jos järjestystä vaihtaa, niin aina eka suorittuu ja jälkimmäinen kaatuu.
Virhetilanteessa php-palikka ei saa mitään kontaktia palvelimella.
Käytät samaa Pyynto-muuttujaa kummallekin kyselylle, mutta koska kyselyt tehdään samaan aikaan, homma ei tietenkään toimi, vaan ensimmäisen kyselyn Pyynto hukataan, kun toinen kysely alkaa.
Eka toimii aina, mutta toinen ei eli taitaa olla toisinpäin?
Eikös tuossa esimerkissä oleva alert('Testi2c'); kumminkin estä jälkimmäisen etenemisen - se voi olla siinä vaikka 30min ilman kuittausta ja kun kuittaa, niin tulee virhe?
JS toimii yhdessä säikeessä, joten myöskään onreadystatechange-käsittelijää ei ajeta alert-ikkunan aikana vaan vasta lopuksi.
Jos tarkoitus on saada jotain aikaan eikä vain kikkailla AJAXin kanssa, kannattaa käyttää valmiita kirjastoja (Prototype, jQuery).
Aihe on jo aika vanha, joten et voi enää vastata siihen.