我有一个来自jquery的标准ajax调用,如下所示。
我想检查返回的json数组是否正在请求一个新页面,如果是,请转到那里,不要执行.allways回调。
有简单的方法吗?
var jqxhr = $.ajax({
url: server_URL + '/index.php',
type: 'post',
dataType: "json",
data: obj
}).done(function (data) {
if (data['go_location']) {
window.location.href = data['go_location'];
} else {
//other stuff
}
}).fail(function () {
alert("ajax error");
}).always(function () {
//other code
});
正如名称所说,'always',无论成功还是失败,都执行.always()。您不想在成功状态下执行.always(),但在失败状态下执行,这是不可能的。您在ajax响应上调用了三个方法,即.done()、.fail().always()。ajax完成后,所有方法都会立即触发[.done()和.alway()功,否则.fail()和.always()]。我们知道jquery/js是异步的,所以,即使是任何其他方法中的return语句也不能停止.always()的执行。在您的情况下,唯一的选项是不要使用.Alvays(方法。无论状态是成功还是失败,都会执行.done()或.fail()因此,如果需要,可以将.always()方法语句移动到这些方法中。
$.ajax({
url: server_URL + '/index.php',
type: 'post',
dataType: "json",
data: obj
}).done(function (data) {
//Do something if ajax succeeds
if (data['go_location']) {
window.location.href = data['go_location'];
} else {
//other stuff
}
}).fail(function () {
//Do something if ajax fails
})
我真的不明白为什么你有.always
函数,但我认为你可以试试这个:
$.ajax({
url: server_URL + '/index.php',
type: 'post',
dataType: "json",
data: obj,
success: function(data) {
if (data['go_location']) {
window.location.href = data['go_location'];
} else {
//other stuff
}
},
error: function(data) {
alert("ajax error");
}
}