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!!



