ti-enxame.com

Retorno de chamada de erro de jquery ajax

Eu preciso de algumas sugestões aqui ou talvez algumas explicações. Eu tenho uma chamada jquery ajax,

$.ajax({
 type: "GET",
 url: base_url+'/ajax/fetch/counts/',
 dataType: 'json',
 data: {},
 error: function(xhr, error){
        console.debug(xhr); console.debug(error);
 },
 success: display_counts
});

Está funcionando bem. Meu retorno de chamada success é acionado corretamente com a resposta. Mas, o que notei é que meu retorno de chamada error é acionado toda vez, mesmo quando minha chamada retorna o status de sucesso 200. No error retorno de chamada acima, vejo esse objeto xhr.status é 200.

Alguém pode explicar o que está errado ou o que está acontecendo aqui? error o retorno de chamada deve ser acionado apenas quando eu tiver 404 ou talvez uma resposta que não seja 200. Minhas suposições estão corretas?

Obrigado.

34
simplyharsh

O retorno de chamada de erro é chamado em erros http, mas também se a análise JSON na resposta falhar. Provavelmente, isso é o que está acontecendo se o código de resposta for 200, mas você ainda é acionado por um retorno de chamada de erro.

28
eis

Apenas uma sugestão, tente usar o $. AjaxSetup () para obter o erro correto como este:

$(function() {
    $.ajaxSetup({
        error: function(jqXHR, exception) {
            if (jqXHR.status === 0) {
                alert('Not connect.\n Verify Network.');
            } else if (jqXHR.status == 404) {
                alert('Requested page not found. [404]');
            } else if (jqXHR.status == 500) {
                alert('Internal Server Error [500].');
            } else if (exception === 'parsererror') {
                alert('Requested JSON parse failed.');
            } else if (exception === 'timeout') {
                alert('Time out error.');
            } else if (exception === 'abort') {
                alert('Ajax request aborted.');
            } else {
                alert('Uncaught Error.\n' + jqXHR.responseText);
            }
        }
    });
});
30
palaѕн

Algumas coisas em que consigo pensar:

  1. Verifique se você desativou o cache configurando cache: false.
  2. Se você estiver usando o Firefox, tente usar o Firebug e a guia Net para monitorar a solicitação
  3. Não confie no analisador JSON do navegador. Eu recomendaria este: https://github.com/douglascrockford/JSON-js/blob/master/json2.js do criador do JSON não menos
2
Chris Laplante

A pergunta recente teve um problema semelhante com os pedidos de json jquery, tente remover o ambiente () da sua resposta json.

1
aularon

Não sou especialista em jQuery, mas sei que, com o Prototype.js, o manipulador de erro AJAX é acionado se a solicitação for bem-sucedida, mas o manipulador success causa um erro. É o mesmo no jQuery? Você pode testar se é isso que está acontecendo colocando todo o conteúdo de display_counts em um try..catch block .

1
Josh