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...
Lähetä AJAX-kysely synkronisesti tai sijoita ikkunan sulkeminen kyselyn käsittelijään.
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?
Monet asiat onnistuvat esimerkiksi niin, että laittaakin koodin setTimeoutilla tapahtumaan "heti" eli vaikka 1 millisekunnin kuluttua.
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?
Aihe on jo aika vanha, joten et voi enää vastata siihen.