Autor Zpráva
joe
Profil
Zdravím,

Řešim takový ne moc vážný problém, ale přesto mi to vadí a nechápu to :-)
Jde o to, že pomocí AJAXU odesílám formulář s komentářem (--> db), po úspěšném vložení vypíšu na místo formuláře hlášku, že komentář byl vložen, případně chybu. Potom zaktualizuju komentáře pod tou hláškou, problém je, že ne vždy se mi zobrazí právě aktuální komentáře (bez toho vloženého).

Kód mám nějak takhle:

ajax('/ajax.php?action=send_comment&photoId=' + photoId + '&comment=' + comment, 'userFormComment');
loadComments(photoId);

(ve funkci loadComments je další volání PHP skriptu)

Pokud před loadComments napíšu třeba alert(); tak se v těch načtených komentářích objeví ten nový vždy po odkliknutí alertu. Pokud to ale mám tak jak jsem to napsal zde, tak se někdy objeví a někdy ne. Mohlo by to uživatele zmást a nevím co s tím. Jakoby načítání komentářů proběhlo ještě dřív než jeho samotné vložení...

Poradíte někdo?

Díky moc ;-)
Mike874
Profil *
jak to vidim ja, tak musis udelat neco takovyho...

funkce ajax ti vytvari objekt xmlhttprequest
ten request ma udalost/handler onreadystate, tomu priradis svoji funkci, ktera bude kontrolovat hodnotu readystate, a pokud se to bude rovnat 4 (pozadavek splnen) tak zavola tvoji fci loadComments
peta
Profil
joe
Poradíte někdo? NE
Neni, co k cemu poradit. Zrovna po ruce nemam krostalovou kouli, ktera mi da 3 zakladni odpovedi.
- odkaz na kod (soubor.php.txt)
- odkaz na funkcni stranku (soubor.php)
- vypis JS konzoly
V tom pripade jsem s odpovedmi skoncil :)
Chamurappi
Profil
Reaguji na joa:
Živá ukázka by pomohla.

<nesouvisející>
Sice nevím, jak funguje tvá funkce „ajax“, ale jestli posíláš celý komentář GETem, tak si dej pozor na Explorer, má totiž limit pro délku URI daný proklatě nízko. Na posílání delších věcí je lepší POST.
</>
joe
Profil
Chamurappi
Zatím jsem nezkoušel posílat formulář POSTem přes AJAX, taky na to dojde.

Na AJAX používám následující kód:

function ajax(source, object) {
    var httpRequest;
    
    if(typeof window.ActiveXObject != 'undefined') {
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    } else {  
        httpRequest = new XMLHttpRequest();
    }
    httpRequest.open("GET", source, true);
    httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
    httpRequest.onreadystatechange = function () {
        processRequest(httpRequest, object) 
    };
    httpRequest.send(null);
}

function processRequest(httpRequest, object) {
    if(httpRequest.readyState == 4) {
        if((httpRequest.status >= 200 && httpRequest.status < 300 ) || httpRequest.status == 304) {
            if(typeof object == 'string')  {
                document.getElementById(object).innerHTML = httpRequest.responseText;
            }
            if(typeof object == 'function') {
                object(httpRequest.responseText);
            }
        } else {
            alert("Chyba pri načítání " + httpRequest.status +" : "+ httpRequest.statusText);
        }
    } else {
        if(typeof source == 'string' && source != '')  {
            document.getElementById(source).innerHTML = 'načítám...';
        }
    }     
}


zavolám tedy:

ajax('skript.php', 'id_divu_kam_se_nacte_vysledek');

Asi by to chtělo nějak pozastavit, dokud se obsah skutečně nenačte, zkusím si s tím pohrát ještě.

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:

0