Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akci až 30 % zdarma při nákupu e-learningu - Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
discount 30 + hiring

Diskuze: Funkce submit se vykoná několikrát za sebou

Aktivity
Avatar
hankova31
Člen
Avatar
hankova31:1.3.2020 20:38

Ahoj, chtěla bych požádat o radu. Mám na stránce tlačítko typu submit. Po kliknutí chci pomocí ajaxu (bez přesměrování a bez reloadu stránky) vyvolat funkci, která něco otestuje v databázi a vrátí 1 nebo 0. Pokud vrátí 1, chci následně chci část stránky přepsat, pokud 0, jen vypíše alertem zprávu.
A jde o to, že pokud kliknu jednou, test fukce vrátí 0, vypíše se alert správně. Pokud podruhé vrátí test 1, opět se správně přepíše část stránky. Od této chvíle ale po každém kliknutí na toto tlačítko se volá funkce ne jednou na jedno kliknutí, ale postupně 2x, 4x apod.(od prvního přepsání části stránky a to obsah vždy v této části nejprve celý smažu). Nevím kde je chyba.

Zkusil jsem: $("#insert_for­m").submit(fun­ction(event){
event.preventDe­fault();
var post_url = $(this).attr("ac­tion");
var request_method = $(this).attr("met­hod");
$.ajax({
url : post_url,
type: request_method,
data : {/*data pro test do db*/},
dataType: 'JSON',
beforeSend: function() {
$("#update_ac­tion").prop('di­sabled', true); // disable button
},
success: function(data){
if(data.ok == 1)
{
/* pomocí ajax znění část stránky*/
}
else{
alert(data.error);
}
$("#update_ac­tion").prop('di­sabled', false);
}
})
});

Chci docílit: Může mi někdo poradit, kde může být chyba?

 
Odpovědět
1.3.2020 20:38
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2.3.2020 7:48

Podle popisu mi to prijde jako spatne nastaveny casovac.
https://mlich.zam.slu.cz/…s-xchat.html
Kdyz tu kliknes na obalku, tak resetuji casovat a ten stary smazu. Ve tvem pripade nejspis ti bezi 2 casovace najednou a kazy znich si pusti pri ukonceni dalsi. Krasne bys to videla, kdyz si nechas zobrazovat stav casu. Najednou ti to cislo zacne strasne rychle preblikavat, jak kazdy ten casovac vykonava funkci.

setTimeout, setInterval

Jinak, submit, pokud formular nechces odeslat, tak by melo vracet false.

function(...){... return false}

Pokud nastane nejaky error, tak se ti vrati true. Takze by bylo dobre to mit primo v html kodu. Tobe ta funkce nevraci nic. A netusim, jestli ti to nespousti nejaky casovac (jquery ajax). Ja pouzivam obvykle httprequest pro ajax, abych se vyhnul jquery. Urcite tam nemas jeste jiny kod?
Pripadne, zkus vygooglovat priklady pro tvuj problem
google = jquery ajax form submit problem example

Editováno 2.3.2020 7:49
 
Nahoru Odpovědět
2.3.2020 7:48
Avatar
hankova31
Člen
Avatar
Odpovídá na Peter Mlich
hankova31:2.3.2020 8:05

V části if(data.ok == 1) volám ajaxem další funkci (stejně jako v příkladě), která mi pak vrátí data, na základě nichž překreslím část původní stránky. (Na stránce je tabulka s rozvrhem, kliknu na nějakou rozvrhovou akci, zobrazí se formulář pro úpravu, pokud kliknu na upravit, tak ajaxem vykonám test, zda k úpravě může dojít, pokud ne, vyskočí aletrt, pokud ano, chci tabulku překreslit. Jen jak říkám, po prvním překreslení se po kliknutí na submit akce provede násobněkrát).

 
Nahoru Odpovědět
2.3.2020 8:05
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2.3.2020 9:06

Muzes vyrobit jednoduchy priklad, html stranku? Viz ten muj odkaz. Ajaxem natahuji html stranky. Vubec tam neni to php pozadi.

 
Nahoru Odpovědět
2.3.2020 9:06
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2.3.2020 10:32

Jo, a druha moznost, viz link, pouzij muj ajax, ten to nedela.

 
Nahoru Odpovědět
2.3.2020 10:32
Avatar
hankova31
Člen
Avatar
hankova31:2.3.2020 11:04

Zkusím se na to podívat, případně tu hodím jednoduchý příklad.

 
Nahoru Odpovědět
2.3.2020 11:04
Avatar
Odpovídá na hankova31
Lukáš Křehula:2.3.2020 14:25

Zkontroluj, jestli při updatu stránky nevložíš znovu ten javascriptový kód - navěsí se nový event listener a ten obslužný javascriptový kód na stránce existuje 2x.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět
2.3.2020 14:25
Avatar
hankova31
Člen
Avatar
Odpovídá na Lukáš Křehula
hankova31:2.3.2020 18:39

To:Lukáš Křehula
Děkuji, přemýšlela jsem nad tím už předtím, dala jsem část kódu s js úplně mimo, že jej načítám jen jednou a funguje, zřejmě se to načetlo víckrát. Děkuji.

 
Nahoru Odpovědět
2.3.2020 18:39
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.