Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: AJAX: kutsun jälkeinen window.close()

B_R_H [20.07.2009 16:51:03]

#

Taas lisää näitä ajax-ongelmia.

Tällä kertaa onneksi lyhyt koodinpätkä. Lomakkeella on painonäppäin, jonka takana seuraava javascript-koodi:

function poistu() {
KasitteleSessiot('listaanimet.php','huuhaa=1',Tarkista,true);
	// alert('Jälkeen');
	window.close();
}

KasitteleSessiot-parametrit:
Kutsuttava php palvelimella
Muuttujat post-komennolle
Paluuvastauksen käsittelevä funktio
asyknroninen vai synkroninen

Yo. koodi toimii oikein, jos tuo KasitteleSessiot-kutsun jälkeen on alert koodissa mukana. Funktion palauttama alert tulee näkyviin ok (ei ole tässä mutta ihan perusjuttu suoraan putkan esimerkistä).

Jos taas tämä alert on kommenttina (kuten tässä yllä), koodi ei toimi ja ei edes alerttia tule näkyviin. Lienee jotakin tekoa ajaxin asynkroniikan kanssa? Miten tuon voisi toteuttaa ennen ikkunan sulkemista?

Juu ja olen tietoinen JQuerystä ja Prototypestä :-)

Kiitos etukäteen...

Metabolix [21.07.2009 09:08:15]

#

Lähetä AJAX-kysely synkronisesti tai sijoita ikkunan sulkeminen kyselyn käsittelijään.

B_R_H [21.07.2009 16:13:15]

#

Hei ja kiitos taas,

Tuo synkroninen toimii ok ja vaikka funktiota ei silloin ajetakkaan, saa tuon responsen poimittua talteen muutoin.

Tätä toista, joka olisi mulle käytössä parempi, en saanut millään toimimaan.

function Tarkista()
{
    var win = window.opener;

    // Tarkistetaan, onko pyyntö suoritettu kokonaan:
    if(Pyynto.readyState == 4) {
        // Tarkistetaan, onko pyynnön suoritus onnistunut:
        if(Pyynto.status == 200) {
           // Jos kaikki on kunnossa, alustetaan näytöt kentät:
           win.document.getElementById("lomake").nimet.value=Pyynto.responseText;
	alert('ennen closea');
	window.close();
	alert('closen jälkeen');
        } else {
            alert("Funktion suorituksessa on tapahtunut virhe! "+Pyynto.status);
        }
    }
}

eli käsittelijässä olevan molemmat alertit tulevat näkyviin, mutta ikkuna ei sulkeudu - miten se mahtaisi onnistua?

Metabolix [21.07.2009 16:28:47]

#

Monet asiat onnistuvat esimerkiksi niin, että laittaakin koodin setTimeoutilla tapahtumaan "heti" eli vaikka 1 millisekunnin kuluttua.

B_R_H [21.07.2009 17:12:48]

#

Tarkoitit varmaankin jotakin tällaista?

setTimeout("window.close()",1);

Toimii vain, jos tuolla alkuperäisessä koodissa on taas alertti paikallaan ja sen kun kuittaa, niin tämä timeoutilla asetettu ikkuna sulkeutuu . Jos alertin poistaa tai pistää sille timeoutin, niin tämä tarkista-käsittelijä menee virheeseen, jossa Pyynto.status = 0

Ideaa?

Vastaus

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

Tietoa sivustosta