jQuery AJAX 错误回调不是 运行
jQuery AJAX error callback not running
我有一个 AJAX 调用如下:
$.ajax({
type: "get",
url: "xxx.xxx.xxx/xxx.js",
dataType: 'jsonp',
success: function(data) {
console.log("success");
}
}).done(function(data){
console.log("done");
}).fail(function(data){
console.log("fail");
}).always(function(){
console.log("always")
});
当调用成功时,success
和done
函数运行。但是,当调用失败时(比如当我将 url 更改为 gobbledygook 时)什么都没有 运行,甚至 always
也没有。
该行为在 Firefox 和 Chrome 中都会发生。
我看到很多其他人提到 JSONP
有问题,接受的答案是 async: false
会起作用,但 async: false
和async: true
成功了。
这似乎是什么问题?
一个可行的解决方法是添加 timeout
.
$.ajax({
type: "get",
url: "xxx.xxx.xxx/xxx.js",
dataType: 'jsonp',
success: function(data) {
console.log("success");
},
timeout: 5000
}).done(function(data){
console.log("done");
}).fail(function(data){
console.log("fail");
}).always(function(){
console.log("always")
});
然后 5 秒后,error/always 起作用。
我有一个 AJAX 调用如下:
$.ajax({
type: "get",
url: "xxx.xxx.xxx/xxx.js",
dataType: 'jsonp',
success: function(data) {
console.log("success");
}
}).done(function(data){
console.log("done");
}).fail(function(data){
console.log("fail");
}).always(function(){
console.log("always")
});
当调用成功时,success
和done
函数运行。但是,当调用失败时(比如当我将 url 更改为 gobbledygook 时)什么都没有 运行,甚至 always
也没有。
该行为在 Firefox 和 Chrome 中都会发生。
我看到很多其他人提到 JSONP
有问题,接受的答案是 async: false
会起作用,但 async: false
和async: true
成功了。
这似乎是什么问题?
一个可行的解决方法是添加 timeout
.
$.ajax({
type: "get",
url: "xxx.xxx.xxx/xxx.js",
dataType: 'jsonp',
success: function(data) {
console.log("success");
},
timeout: 5000
}).done(function(data){
console.log("done");
}).fail(function(data){
console.log("fail");
}).always(function(){
console.log("always")
});
然后 5 秒后,error/always 起作用。