Autor Zpráva
Monkeys
Profil *
Riesim kontrolu duplicitnych informacii cez ajax
Teda ak su duplicitne informacie tak by sa nemal odoslat formular no napriek tomu sa odosle
v com robim chybu ?

$("form").bind("submit", function(){
var valid = true;

$.post(
"duplicate_data.php",
{data : data},
function(xhr)
{
callback(xhr);
}
);

function callback(result)
{
//result vracia spravny vysledok
if(result == "duplicate")
{
error("Text");
valid = false;
}    
}
return valid;
});

Vdaka

M.
Chamurappi
Profil
Reaguji na Monkeyse:
v com robim chybu ?
Zpracování události submit nevrací false.
Odeslání musíš zastavit vždy, protože AJAX je asynchronní, na odpověď serveru se nečeká.

Připadá mi divné odesílat formulář nejprve AJAXem a pak znovu normálně. Proč by se měly odehrávat dva POSTy po sobě?
Monkeys
Profil *
Chamurappi:
Připadá mi divné odesílat formulář nejprve AJAXem a pak znovu normálně. Proč by se měly odehrávat dva POSTy po sobě?
Tato funkcia je poslednou funkciou z mnohych ktora kontroluje ci uzivatel nezadal duplicitne data.
Riesim to cez javascript preto, lebo formular obsahuje aj ine veci ktore, keby som riesil cez PHP tak by sa refreshom stratili.

Ja len nerozumiem jednej veci:
ak mam v tom kode napriklad:

if(nazov_textoveho_inputu == "")
{
valid = false;
}
tak tento kod zabrani odoslaniu formulara, ale v tej funkcii callback volam na konci tiez
valid = false;
a predsa sa odosle ?

protože AJAX je asynchronní
V objekte $.ajax sa da nastavit myslim volba async : false problem je ze pre skrateny zapis $.post to neexistuje

M.
juriad
Profil
Kontrolu na duplicitu budeš stejně provádět i na serveru.
Pro realizaci nápovědy (víc to není, zkušený uživatel tvou kontrolu obejde) uživateli, že zadal duplicitu, nemá smysl se dotazovat až v okamžiku odeslání formuláře. Raději se ptej na duplicitu třeba v onblur zpracvání události text inputu. Tím uživateli okamžitě řekneš, že zadal duplicitu a můžeš zablokovat odesílací tlačítko, dokud duplicitu neopraví.

Můžeš také v onsubmit vrátit vždy false a formulář odesílat pomocí form.submit() v callbacku. Bacha na zacyklení.

Druhou možností je odeslání celého formuláre přes AJAX a v případě kladné odpovědi, stránku přesměruješ. V opačném případě mu vysvítíš chybná pole. V tomto případě provádí validaci čistě jen server a vrací seznam chybných polí.
Monkeys
Profil *
juriad:
Vdaka za navrhy vyriesil som to cez change a zablokovanie tlacitka
aleked mam pravdu povedat neni som moc spokojny lebo som to chcel riesit cez ten sumbim ale nedari sa mi to.
aj ked pouzijem pri sumbite toto.
(e.preventDefault) ? e.preventDefault() : e.preventValue = false;
tak sa vykona prikaz spravne ale pri NEduplicite sa to aj tak neodosle
skusil som to aj formou $("form").unbind("submit"); ale toto reaguje az na druhy klik co je tiez neprijatelne.

M.
pako
Profil *
Monkeys
Chamurappi sa ti snazil vysvetlit, ze v momente, ked odosielas formular na server tak ma valid vzdy hodnotu true
preventDefault proste zabrani defualtnej akcii - mohol by si odosielat formular podmienecne v callbacku na zaklade odpovede zo servera a tam aj odstranit obsluhu.
Neviem o tom, ze by event objekt mal vlastnost preventValue, nechcel si pouzit returnValue ?
Monkeys
Profil *
pako:
Niekde som sa docital ze e.preventValue = false funguje pre starsie prehliadace IE.

M.

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: