如果某些条件为真,我试图使用beforeSend
中止ajax调用。
只要我致电jqXHR.abort()
或return false
。
我收到以下错误
TypeError: $.ajax(...).fail is not a function
.fail(function (jqXHR, textStatus, errorThrown) {
以下是javascript代码
$.ajax({
type: "POST",
beforeSend: function (jqXHR) {
if (1 === 1) {
jqXHR.abort();
}
},
data: { x:1},
url: 'echo/json'
})
.fail(function (jqXHR, textStatus, errorThrown) {
console.log("error"+textStatus)
})
.done(function (data) {
console.log("ajax complete");
console.log(data);
});
jsfiddle:http://jsfiddle.net/939xG/
有谁知道为什么jqXHR.abort()在beforeSend thorws出错?
或者我如何更改beforeSend中的代码,以便我可以在没有任何错误的情况下中止ajax请求。
我使用的是jquery 1.7.2,无法升级到更高版本
答案 0 :(得分:1)
当您在beforeSend中中止$.ajax
时,$.ajax
将返回false
而不是jqXHR。通过不在beforeSend中中止,或者不使用完成和失败方法来支持使用成功和错误选项来避免它。
var jqXHR = $.ajax({
type: "POST",
beforeSend: function (jqXHR) {
if (1 === 1) {
jqXHR.abort();
}
},
data: {
x: 1
},
url: 'echo/json',
success: function (data) {
console.log("ajax complete");
console.log(data);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log("error" + textStatus)
}
});
console.log(jqXHR) // false
这对我来说听起来像个错误,但由于升级jquery不是一种选择,我没有考虑这种可能性。