il modulo di invio non si ferma nella chiamata jquery ajax

Ho ottenuto il seguente codice:

$.ajax({ type: "POST", async: false, url: "CheckIdExist", data: param, success: function(result) { if (result == true){ return false; } }, error: function(error) { alert(error); return false; } }); 

se il valore restituito da ajax è true, il modulo deve interrompere l’invio.

ma non interrompe il modulo di invio.

qualsiasi aiuto per favore.

Presumo tu abbia qualcosa come:

 form.submit(function(event) { $.ajax(...); }); 

Si desidera return false (o chiamare event.preventDefault() ) nella funzione di gestione degli eventi stessa e non nella chiamata AJAX, ad esempio:

 form.submit(function(event) { $.ajax(...); event.preventDefault(); }); 

Una leggera variazione di questa domanda è: voglio usare jquery e ajax per presentare un messaggio di errore a un utente, ma poi fare un’elaborazione normale se non ci sono errori.

Supponiamo che il metodo “check” restituisca una risposta che è vuota se non ci sono errori, e ha gli errori in essa contenuti se ce ne sono.

Quindi puoi fare qualcosa di simile nella tua funzione pronta:

 $("#theform").submit(function() { var data = { ... } $.get('/check', data, function(resp) { if (resp.length > 0) { $("#error").html(resp); } else { $("#theform").unbind('submit'); $("#theform").submit(); } }); event.preventDefault(); }); 

Quindi, come funziona? Quando viene triggersta la funzione di invio esterno, crea i dati necessari per la chiamata AJAX (qui la funzione di livello superiore ottiene). La chiamata è pianificata e il thread principale di operazione continua immediatamente, ma l’invio viene arrestato incondizionatamente, quindi non accade nulla di evidente.

Passa qualche ora e la chiamata AJAX restituisce il risultato della richiesta. Se non vuoto, il risultato viene mostrato all’utente.

Se la risposta è vuota, tuttavia, la funzione di invio non è associata. Ciò impedisce al ssytem di effettuare una chiamata extra attraverso la funzione di invio esterno. Viene chiamata la funzione di invio interno. Questo innesca una vera e propria sottomissione della forma al bersaglio della forma, e la vita continua come previsto.

Devi fare una richiamata.

Questa voce nelle FAQ mi ha aiutato molto quando ho avuto questo problema esatto.

 getUrlStatus('getStatus.php', function(status) { alert(status); }); function getUrlStatus(url, callback) { $.ajax({ url: url, complete: function(xhr) { callback(xhr.status); } }); } 

Il motivo è che non puoi tornare in una funzione AJAX.

Il codice sopra non funziona come desiderato a causa della natura della programmazione asincrona. Il gestore di successo fornito non viene richiamato immediatamente, ma piuttosto in un momento successivo in cui la risposta viene ricevuta dal server. Quindi, quando usiamo la variabile ‘status’ subito dopo la chiamata $ .ajax, il suo valore è ancora indefinito.

Non è ansible inserire questo codice in una funzione o nel onsubmit di un modulo, la funzione success restituisce il risultato restituito al contesto jQuery ajax, NON il contesto di invio del modulo.

In questo caso è necessario eseguire una richiesta http sincrona, ovvero impostare l’opzione asincrona su false.
Nella tua versione il httpxmlrequest è asincrono. Potrebbe essere terminato molto tempo dopo che è stato restituito il gestore onsubmit e la richiamata onsuccess viene richiamata dal contesto del gestore onsubmit.
“Return false” sarà il valore di ritorno della funzione di funzione anonima (risultato) {…} e non il valore di ritorno del gestore onsubmit.

Ho avuto questo problema, ma l’ho risolto cambiando il tipo di input = “submit” per type = “button” e poi fai la tua richiesta ajax

  $("input#submitbutton") { $.ajax( { type: "POST", async: false, url: "CheckIdExist", data: param, success: function(result) { if (result == true){ //TODO: do you magic } else $("form").submit(); }, error: function(error) { alert(error); return false; } }); });