Como posso apanhar os erros do jQuery AJAX?

Quando um pedido do AJAX é submetido a um site, os erros do lado do servidor são facilmente tratados com a abordagem da promessa do jQuery. .done(), .fail(), etc. No entanto, para alguns pedidos (por exemplo, para um site inválido ou um que não aceita pedidos de origem cruzada), uma exceção ocorre imediatamente à medida que a chamada é feita. Aqui está um exemplo de um erro na consola:

O XMLHttpRequest não consegue carregar http://someotherserver/api/blahblah. Origem http://localhost:52625 não é permitido pelo Access-Control-Allow-Origin.

Sim, eu sei. sobre o CORS...não é essa a questão. O que estou realmente a fazer é tentar uma chamada da API web para testar se o IP/nome do servidor está correcto

Estou ciente da opção error na sintaxe do pedido de jQuery:

$.ajax({
    url: remoteURL,
    type: 'GET',
    error: function (err) {
        console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
    }
}).etc.etc.

o erro é tratado aqui, mas as excepções ainda estão registadas na consola. Parecia razoável embrulhar o acima num bloco, mas isso não parece ajudar.

Encontrei esta pergunta, mas a solução envolve hackear o código jQuery. Certamente há um melhor maneira de apanhar estes erros e não entupir os registos da consola??

Author: Community, 2013-09-18

2 answers

Tenta isto:

$.ajax({
    url: remoteURL,
    type: 'GET',
    error: function (err) {
        console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
    }
}).always(function(jqXHR, textStatus) {
    if (textStatus != "success") {
        alert("Error: " + jqXHR.statusText);
    }
});

Ouvinte XHR:

$.ajax({
    url: remoteURL,
    type: 'GET',
    xhr: function(){
        var xhr = new window.XMLHttpRequest();
        xhr.addEventListener("error", function(evt){
            alert("an error occured");
        }, false);
        xhr.addEventListener("abort", function(){
            alert("cancelled");
        }, false);

        return xhr;
    },
    error: function (err) {
        console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
    }
});
 7
Author: Mr.Manhattan, 2013-09-18 07:24:15

Pode usar a consola de programadores web no google chrome. Press F12. E use a página Redes para verificar a resposta, e para javasvript e erros jQuery e Ajax você pode usar a página Console. :)

Tente isto adicionando à sua função ajax:

error: function(XMLHttpRequest, textStatus, errorThrown) {
 alert(errorThrown);
 3
Author: Shreejibawa, 2013-09-19 04:57:55