Funzione errore jQuery ajax

Ho una chiamata ajax che passa i dati a una pagina che restituisce un valore.

Ho recuperato la chiamata riuscita dalla pagina ma l’ho codificata in modo che sollevi un errore nell’asp. Come posso recuperare quell’errore dal jquery?

Per esempio:

cache: false, url: "addInterview_Code.asp", type: "POST", datatype: "text", data: strData, success: function (html) { alert('successful : ' + html); $("#result").html("Successful"); }, error: function (error) { **alert('error; ' + eval(error));** } 

È il bit di errore che non capisco. Nella funzione quale parametro devo inserire, in modo che possa quindi utilizzare il messaggio di errore che ho generato nel server.

I parametri richiesti in una funzione di error Ajax sono jqXHR, exception e puoi utilizzarla come di seguito:

 $.ajax({ url: 'some_unknown_page.html', success: function (response) { $('#post').html(response.responseText); }, error: function (jqXHR, exception) { var msg = ''; if (jqXHR.status === 0) { msg = 'Not connect.\n Verify Network.'; } else if (jqXHR.status == 404) { msg = 'Requested page not found. [404]'; } else if (jqXHR.status == 500) { msg = 'Internal Server Error [500].'; } else if (exception === 'parsererror') { msg = 'Requested JSON parse failed.'; } else if (exception === 'timeout') { msg = 'Time out error.'; } else if (exception === 'abort') { msg = 'Ajax request aborted.'; } else { msg = 'Uncaught Error.\n' + jqXHR.responseText; } $('#post').html(msg); }, }); 

FIDDLE DEMO


parametri

jqXHR:

In realtà è un object di errore che è simile a questo

Errore Ajax jqXHR oggetto

Puoi anche visualizzarlo nella tua console del browser, utilizzando console.log all’interno della funzione di error come:

 error: function (jqXHR, exception) { console.log(jqXHR); // Your error handling logic here.. } 

Stiamo usando la proprietà status di questo object per ottenere il codice di errore, come se ottenessimo status = 404 questo significa che la pagina richiesta non è stata trovata. Non esiste affatto. Sulla base di tale codice di stato, possiamo redirect gli utenti alla pagina di accesso o qualunque sia la nostra logica aziendale.

eccezione:

Questa è una variabile stringa che mostra il tipo di eccezione. Quindi, se stiamo ricevendo errore 404, il testo delle exception sarebbe semplicemente ‘errore’. Allo stesso modo, potremmo ottenere “timeout”, “abort” come altri testi di eccezione.


Avviso di jqXHR.success() : i jqXHR.success() , jqXHR.error() e jqXHR.complete() sono deprecati da jQuery 1.8. Per preparare il codice per la loro eventuale rimozione, utilizzare invece jqXHR.done() , jqXHR.fail() e jqXHR.always() .

Quindi, nel caso in cui si utilizzi jQuery 1.8 o successivo , sarà necessario aggiornare la logica della funzione di errore e di successo come: –

 // Assign handlers immediately after making the request, // and remember the jqXHR object for this request var jqxhr = $.ajax("some_unknown_page.html") .done(function (response) { // success logic here $('#post').html(response.responseText); }) .fail(function (jqXHR, exception) { // Our error logic here var msg = ''; if (jqXHR.status === 0) { msg = 'Not connect.\n Verify Network.'; } else if (jqXHR.status == 404) { msg = 'Requested page not found. [404]'; } else if (jqXHR.status == 500) { msg = 'Internal Server Error [500].'; } else if (exception === 'parsererror') { msg = 'Requested JSON parse failed.'; } else if (exception === 'timeout') { msg = 'Time out error.'; } else if (exception === 'abort') { msg = 'Ajax request aborted.'; } else { msg = 'Uncaught Error.\n' + jqXHR.responseText; } $('#post').html(msg); }) .always(function () { alert("complete"); }); 

Spero che sia d’aiuto!

Prova questo:

 error: function(jqXHR, textStatus, errorThrown) { console.log(textStatus, errorThrown); } 

Se vuoi informare il tuo frontend su un errore di convalida, prova a restituire json:

 dataType: 'json', success: function(data, textStatus, jqXHR) { console.log(data.error); } 

Il tuo asp script schould restituirà:

 {"error": true} 

Ecco come si estrae l’errore asp.

  cache: false, url: "addInterview_Code.asp", type: "POST", datatype: "text", data: strData, success: function (html) { alert('successful : ' + html); $("#result").html("Successful"); }, error: function (jqXHR, textStatus, errorThrown) { if (jqXHR.status == 500) { alert('Internal error: ' + jqXHR.responseText); } else { alert('Unexpected error.'); } } 
  cache: false, url: "addInterview_Code.asp", type: "POST", datatype: "text", data: strData, success: function (html) { alert('successful : ' + html); $("#result").html("Successful"); }, error: function(data, errorThrown) { alert('request failed :'+errorThrown); } 

stai usando una funzione

 error(error) 

ma jquery in realtà sta cercando una funzione con tre parametri:

 error(jqXHR, textStatus, errorThrown) 

dovrai aggiungere altri due parametri.

ANCHE: per favore guarda tutti i commenti sopra che menzionano ‘deprecato’ 🙂

 $.ajax("www.stackoverflow.com/api/whatever", { dataType:"JSON" data: { id=1, name='example' } }).succes(function (result) { // use result }).error(function (jqXHR, textStatus, errorThrown) { // handle error }); 
 error(jqXHR, textStatus, errorThrown) 

http://api.jquery.com/jQuery.ajax/

Da jquery.com:

 The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callback methods introduced injQuery 1.5 are deprecated as of jQuery 1.8. To prepare your code for their eventual removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead. 

Se vuoi gestori globali puoi usare:

 .ajaxStart(), .ajaxStop(), .ajaxComplete(), .ajaxError(), .ajaxSuccess(), .ajaxSend()