| 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: 6 let
|
|||
0