função de erro jquery ajax

Tenho uma chamada do ajax a passar dados para uma página que depois devolve um valor.

Recuperei a chamada bem sucedida da página, mas codificei-a de modo a criar um erro no asp. Como posso recuperar 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));**
}
É a parte do erro que não entendo. Na função que parâmetro eu preciso colocar, para que eu possa então usar a mensagem de erro que eu levantei no servidor.

 90
Author: Camilo Terevinto, 2011-07-22

7 answers

Os parâmetros necessários numa função Ajax error são jqXHR, exception e pode usá-la 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);
    },
});

VIOLINO DEMO


Parâmetros

JqXHR:

Na verdade é um objecto de erro que se parece com este

Ajax error jqXHR object

Você também pode ver isto na sua consola do navegador, usando console.log dentro da função error Como:

error: function (jqXHR, exception) {
    console.log(jqXHR);
    // Your error handling logic here..
}
Estamos a usar a propriedade status deste objecto para obter o código de erro, como se tivéssemos status = 404 isso significa que a página solicitada não poderia ser encontrada. Não existe mesmo. Com base nesse código de Estado, podemos redirecionar os usuários para a página de login ou o que a nossa lógica de negócios requer.

Excepção:

Esta é a variável string que mostra o tipo de excepção. Então, se estamos recebendo 404 erro, exception texto seria simplesmente 'erro'. Da mesma forma, podemos ter 'tempo-limite', 'abortar' como outros textos de exceção.


Comunicação de Informações:jqXHR.success(), jqXHR.error(), e os callbacks são depreciados a partir de jquery 1.8. Preparar o seu código para a sua eventual remoção, use jqXHR.done(), jqXHR.fail(), e jqXHR.always() em vez disso.

Então, no caso de você estar usando jQuery 1.8 ou acima {[27] } vamos precisar atualizar a lógica de função 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!
 162
Author: palaѕн, 2015-09-03 17:16:52

Tenta isto:

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

Se quiser informar a sua interface sobre um erro de validação, tente devolver o json:

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

O teu programa asp schould volta:

{"error": true}
 81
Author: czerasz, 2018-06-10 10:51:30

Aqui está como você puxa o erro de asp para fora.

              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.');
                  }
              }
 3
Author: Rich C, 2014-08-26 18:24:56
          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);
          }
 1
Author: sT0n3, 2013-07-03 10:54:17

Estás a usar uma função

error(error) 

Mas o jquery está à procura de uma função com três parâmetros:

error(jqXHR, textStatus, errorThrown)
Tens de 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
});
 1
Author: increddibelly, 2017-01-27 10:14:52
error(jqXHR, textStatus, errorThrown)

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

 0
Author: Praveen Prasad, 2011-07-22 16:20:41

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

.ajaxStart(), .ajaxStop(),
.ajaxComplete(), .ajaxError(),
.ajaxSuccess(), .ajaxSend()
 0
Author: John Kloian, 2014-12-17 18:01:22