JQuery ajax callback никогда не вызывал

Код Javascript, используя jQuery 1.7:

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

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

Я не знаю, что случилось; это должно быть так просто, правильно?

Ответ 1

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

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

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

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

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

Ответ 2

Дайте этот рип:

$.ajax("/ajax_dummy", {
    dataType: "text",
    success: function() {
        console.log("winning.");
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log(textStatus); //error logging
    }
});

Ответ 3

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

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

Ответ 4

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

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

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

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

$.get("/ajax_dummy", function() { alert('foo'); })
  .error(function(d,e) { alert(e); })
  .complete(function() { alert("complete"); });