2011-12-14 4 views
10
кода

Javascript, с помощью JQuery 1.7:JQuery Ajax обратного вызова не называется

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

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

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

+7

'$ .get()' будет терпеть неудачу. Переключитесь на использование '$ .ajax()' с помощью метода 'error' и посмотрите, будет ли это запускаться вместо этого. Если да, взгляните на приведенные аргументы, чтобы понять, что происходит. – JAAulde

+1

Какой контент возвращается из обработчика ajax? Если это JSON, и ответ исказил JSON, он может выйти из строя, не давая вам четкой причины. –

+0

При кратковременном взгляде вы не видите ';' в конце заявления get? – brheal

ответ

8

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

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

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

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

обратный вызов успеха не будет, очевидно, будет уволен.

0

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

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

уступи рип :

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

Это происходит потому, что в соответствии с документацией синтаксис $ .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"); }); 
Смежные вопросы