Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: AJAX: toinen kutsu epäonnistuu

B_R_H [16.07.2009 15:10:00]

#

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.

Metabolix [16.07.2009 16:35:55]

#

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.

B_R_H [16.07.2009 17:33:43]

#

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?

Metabolix [16.07.2009 18:25:35]

#

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).

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta