function de erro do jQuery ajax

Eu tenho uma chamada ajax passando dados para uma página que, em seguida, retorna um valor.

Eu recuperei a chamada bem-sucedida da página, mas eu a codifiquei para que ela apresente um erro no ASP. Como recupero esse erro do jquery?

Por exemplo:

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));** } 

É o erro que não entendo. Na function que parâmetro eu preciso colocar, para que eu possa usar a mensagem de erro que eu levantei no servidor.

Os parâmetros necessários em uma function de error Ajax são jqXHR, exception e você pode usá-lo como abaixo:

 $.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); }, }); 

DEMO FIDDLE


parameters

jqXHR:

Na verdade, é um object de erro que se parece com isso

Ajax error jqXHR object

Você também pode ver isso no seu próprio console do navegador, usando console.log dentro da function de error como:

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

Estamos usando a propriedade status desse object para obter o código de erro, como se obtivéssemos status = 404, isso significa que a página solicitada não foi encontrada. Não existe de todo. Com base nesse código de status, podemos redirect os usuários para a página de login ou o que a nossa lógica de negócios exigir.

exceção:

Esta é uma variável de string que mostra o tipo de exceção. Então, se estamos recebendo erro 404, o texto da exception seria simplesmente ‘erro’. Da mesma forma, podemos obter ‘tempo limite’, ‘anular’ como outros textos de exceção.


Aviso de descontinuação: Os jqXHR.success() , jqXHR.error() e jqXHR.complete() são reprovados a partir do jQuery 1.8. Para preparar seu código para a eventual remoção, use jqXHR.done() , jqXHR.fail() e jqXHR.always() .

Então, caso você esteja usando o jQuery 1.8 ou superior , precisaremos atualizar a lógica da function de sucesso e erro como: –

 // 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"); }); 

Espero que ajude!

Tente isto:

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

Se você quiser informar seu frontend sobre um erro de validação, tente retornar json:

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

Seu script asp deve retornar:

 {"error": true} 

Aqui está como você puxa o erro 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); } 

você está usando uma function

 error(error) 

mas o jquery está realmente procurando por uma function com três parâmetros:

 error(jqXHR, textStatus, errorThrown) 

você precisará adicionar mais dois parâmetros.

TAMBÉM: por favor, dê uma olhada em todos os comentários acima que mencionam ‘depreciado’ 🙂

 $.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/

De 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 você quiser manipuladores globais, você pode usar:

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