právě řeším jeden zapeklitý problém. Po kliknutí na tlačítko chci ověřit, zda zadaná hodnota existuje v databázi - tudíž používám AJAX a php, abych se vyhnul znovunačtení stránky. Jenže AJAX mi vždy vrací výsledky "zpožděně". Vysvětlím ještě později:
Kód: Vybrat vše
<input type="button" value="Odeslat zprávu - dvojklik" onclick="this.value='Odeslat zprávu'; zkontroluj_posta_form();" id="tlacitko_odeslani"
...
function zkontroluj_posta_form()
{
var prezdivka = osetri_retezec(document.getElementById("prijemce").value);
...
vysledky = ajax_vratit_stranku("posta_ajax.php", "id_ze_jmena", prezdivka);
if (vysledky.indexOf("neexistuje") >= 0)
{
alert("retarde");
}
else
{
alert ("neretarde");
}
}
....
function ajax_vratit_stranku(script, nazev_postu, hodnota_postu)
{
if ((typeof nazev_postu === 'undefined') || (typeof hodnota_postu === 'undefined'))
{
nazev_postu = "";
hodnota_postu = "";
}
var xhr;
if (window.XMLHttpRequest)
{
xhr = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
else
{
throw new Error("Ajax není podporován! Zkuste jiný prohlížeč...");
}
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status == 200 && xhr.status < 300) {
odpoved = xhr.responseText;
}
}
}
xhr.open('POST', script);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(nazev_postu+"="+hodnota_postu);
return odpoved;
}
Prakticky jde o to, že po kliknutí se z pole vezme proměnná prezdivka, která se jako parametr hodí ajaxové funkci, která ji zase POSTem pošle PHP skriptu, ten ji vytáhne z databáze, a vypíše "neexistuje" pokud uživatel neexistuje. No a odpověď skriptu si AJAX načte do proměnné odpoved, kterou potom vrátí a na základě vrácené hodnoty hodí JS alert. (zatím spíš zkouším funkčnost než krásné chybové hlášky

Jenže problém je v tom, že ajax má vždy "jedno kolo zpoždění". Když kliknu poprvé, nic se nestane - vůbc žádný alert. Na podruhé to už funguje, jenže problém je, když změním hodnotu inputu. To mi totiž při kliknutí vrací výsledky předchozího kliknutí (např. když mám v db jen uživatele Kuba, do políčka napíšu Kuba. Napřed se nic nestane, napodruhé napíše, že existuje. Jenže když přepíšu na Jirka a znova kliknu, opět napíše, že existuje, a až napodruhé, že ne).
Řekl bych, že problém bude v tom, že se proměnná odpoved ve funkci nestíhá definovat. Zkoušel jsem tudíž i třeba
Kód: Vybrat vše
setTimeout(function () {return odpoved;}, 200)
Víte prosím někdo, jak na to? Ajaxu moc nerozumím, funkci mám víceméně zkopírovanou. Děkuji moc!!