Autor Zpráva
maarlin
Profil
Ahoj,
řeším menší problém s Ajaxem. Mám napsanou funkci, která kontaktuje PHP script, který v případě úspěchu něco vrátí. Pokud bych se to rozhodl použít k nějakému odesílání dat, které bude trvat delší dobu, chtěl bych uživateli nabídnou možnost zrušení akce, ale bohužel jsem nepříšel na to jak to udělat - když ve funkci zapíšu return false; script si tvrdohlavě jede dál a vypíše data ze vzdálené stránky.
Zde je ukázka:

function funkce() {
document.getElementById('prostor').innerHTML = '<img src="progress_kolo.gif" /> Zpracovávám...<br><a onclick="zrus_akci()" href="#zrusit">Zruš akci</a>';

var http_request = false;
var request = "string="+ document.getElementById('string').value;

if (window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (eror) {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
}

// Vracena stavova hlaska (404,200, apod.)
http_request.onreadystatechange = function() { zpracuj(http_request); };

// Co se má zavolat a jakým způsobem (POST/GET)
http_request.open('POST', 'zpracovani-dat.php', true);
// Kodovani odesilanych dat
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// Odeslat požadavek
http_request.send(request);
}

function zpracuj(http_request) {
// Pokud vše proběhlo OK - nastal stav 4
if (http_request.readyState == 4) {
// Pokud stránka vrátila 200 - OK
if (http_request.status == 200) {
alert(http_request.responseText);
} else {
alert('Chyba - volaná stránka vrátila chybu '+ http_request.status);
}
vynuluj_stav ();
}
}
function vynuluj_stav () {
document.getElementById('prostor').innerHTML = null;
return false;
}
function zrus_akci () {
document.getElementById('prostor').innerHTML = '<img src="stopped.gif" /> Zastaveno';
return false;
setTimeout("vynuluj_stav()", 3000);
}

Předem díky za tipy a rady.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: