Autor | Zpráva | ||
---|---|---|---|
Milan1236000 Profil |
#1 · Zasláno: 15. 10. 2019, 01:53:03
Ahoj,
už 2 hodiny zkoumám a různě zkouším, proč mi nefunguje naprosto banální kontola AJAXEM při kliknutí na submit a fakt to nechápu, kde může být chyba... Mám následující kus kódu: $(document).ready(function () { $("#report_bug_form").on('submit', function (e) { var allowSubmit = checkBeforeSubmit(); alert("submit - after function: " + allowSubmit); //return allowSubmit; return false; }); }); function checkBeforeSubmit() { var allowSubmit = true; var request = $.ajax({ method : "GET", data : {eco : $("#eco").val()}, dataType : "text", url : "plugin.php?page=ECOReport/checkECOBeforeSubmit", context : document.body }); alert("value: " + $("#eco").val()); alert("allow before: " + allowSubmit); request.done(function (msg) { alert("test1: " + msg); if (msg == "false") { // found duplication allowSubmit = false; alert("test2"); } }); alert("allow after: " + allowSubmit); return allowSubmit; } Když si přímo otevřu samostatnou URL adresu s parametrem "eco", co se přesně posílá AJAXEM, tak se vždy správně vrátí textový řetězec (ano, textový) true, nebo false. True se vrátí, když ještě hodnota v databázi neexistuje a false, když existuje. Simuluju následující - otevřu si stránku s formulářem, kde je JS soubor s AJAXEM a odešlu formulář (zatím tam mám schválně fixně return false, aby se neodeslal a kontroluju, jestli se posílají/získávají správné hodnoty). Po odeslání mě jednak zaráží pořadí zobrazovaných hlášek: value: 690 allow before: true allow after: true submit - after function: true test1: true A při ruční změně v databázi (simulace toho, že hodnotu formulářem odešle někdo třeba vteřinu přede mnou) to vypadá, že se pořád odesílá AJAX s tou původní hodnotou, protože se pořád vrací řetězec true i přes to, že se při přímém otevření API v URL zobrazuje správně řetězec "false". Zapomněl jsem někde něco? Díky. |
||
Kajman Profil |
#2 · Zasláno: 15. 10. 2019, 07:50:34
Funkce v request.done se nevykoná hned. Jen se nastaví, že se má vykonat, až přijdou data zpět.
Další řádky se vykonají bez čekání (pokud je nastavené asynchronní, což je to A z AJAXu). Jsou dvě možnosti - horší - že nastavíte při volání metody ajax, že se má použí synchronní volání, tedy se prohlížeč zasekne, než se odpověď vrátí. Nebo odeslání formuláře či chybovou hlášku vypíše až funkce v request.done a necháte u submitu return false, aby se neposlal hned. |
||
Milan1236000 Profil |
#3 · Zasláno: 15. 10. 2019, 11:15:45
Paráda, druhý způsob funguje skvěle. Díky moc. :)
|
||
Časová prodleva: 3 roky
|
0