我需要一些建议或者一些解释。我有一个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
});
工作正常。我的success
回调会在响应时正确触发。但是,我注意到我的error
回调每次都被触发,即使我的调用返回成功状态200.在上面的error
回调中,我看到对象xhr.status
是200。
有人可以解释什么是错的,或者这里发生了什么?只有当我有404或非200响应时才会触发error
回调。我的假设是否正确?
感谢。
答案 0 :(得分:30)
只是一个建议,请尝试使用$.ajaxSetup()来获取正确的错误:
$(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);
}
}
});
});
答案 1 :(得分:28)
在http错误上调用错误回调,但如果响应上的JSON解析失败则 。如果响应代码为200但您仍然被抛出错误回调,则可能发生这种情况。
答案 2 :(得分:2)
我能想到的一些事情:
cache: false
。答案 3 :(得分:1)
recent question与json
jquery请求有类似问题,请尝试从json响应中删除周围的()
。
答案 4 :(得分:1)
我不是jQuery专家,但我知道使用Prototype.js,如果请求成功但是success
处理程序导致错误,则会触发AJAX错误处理程序。在jQuery中是一样的吗?您可以通过将display_counts
的全部内容放在try..catch block中来测试这是否正在发生。
答案 5 :(得分:-1)
将dataType
从plain/text
更改为html