JQuery AJAX обратный вызов никогда не вызывается - PullRequest
10 голосов
/ 14 декабря 2011

Javascript-код с использованием jQuery 1.7:

$( function() { 
  $.get('/ajax_dummy', function() { alert('foo');  })
});

С помощью Firebug я вижу, что отправляется HTTP-запрос GET и возвращается ответ «hello world» с кодом 200, так что все выглядит хорошо.Но обратный вызов никогда не вызывается.

Понятия не имею, что не так;это должно быть так просто, верно?

Ответы [ 4 ]

9 голосов
/ 14 декабря 2011

Вы не предоставляете dataType, поэтому jQuery делает "интеллектуальное предположение" о том, что тип контента, из заголовка ответа Content-Type, который вы назвали application/json.

Таким образом, jQuery обрабатывает ответ как JSON, что означает, что он попытается автоматически его проанализировать, что приведет к ошибке.

Поскольку запрос вызывает ошибку

$.parseJSON( "hello world" );
"Invalid JSON: hello world"

обратный вызов успеха явно не сработает.

5 голосов
/ 14 декабря 2011

Дайте этот разрыв:

$.ajax("/ajax_dummy", {
    dataType: "text",
    success: function() {
        console.log("winning.");
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log(textStatus); //error logging
    }
});
0 голосов
/ 14 декабря 2011

Это связано с тем, что согласно документации синтаксис $ .get () должен быть таким:

jQuery.get( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

обратите внимание на опцию обратного вызова success . обратный вызов успеха вызывается, когда запрос является успешным, на основании кодов состояния (200). но ваш URL может быть неверным путем или возвращает какой-то другой код состояния (404), означающий «файл не найден», и, следовательно, возникает ошибка. поэтому метод успеха никогда не вызывался.

также отсутствует обратный вызов «error», определенный в вашем синтаксисе. проверьте следующий более полный код

$.get("/ajax_dummy", function() { alert('foo'); })
  .error(function(d,e) { alert(e); })
  .complete(function() { alert("complete"); });
0 голосов
/ 14 декабря 2011

добавьте эту разметку

<div id="error"></div>

, затем добавьте этот обработчик для перехвата ошибок AJAX

$("#error").ajaxError(function(event, request, settings){
  $(this).append("<li>Error requesting page " + settings.url + "</li>");
});

Кроме того, вы можете переписать свой исходный код, например,

$.get('/ajax_dummy', function() { 
    alert('foo');  
}).error(function() {
    // catch error
});
...