Jquery ajax调用后重定向并跳过。始终
我有一个来自jquery的标准ajax调用,如下所示 我想检查返回的json数组是否正在请求一个新页面,如果是,请转到那里,不要执行.always回调 有没有一个简单的方法可以做到这一点Jquery ajax调用后重定向并跳过。始终,jquery,redirect,jquery-callback,Jquery,Redirect,Jquery Callback,我有一个来自jquery的标准ajax调用,如下所示 我想检查返回的json数组是否正在请求一个新页面,如果是,请转到那里,不要执行.always回调 有没有一个简单的方法可以做到这一点 var jqxhr = $.ajax({ url: server_URL + '/index.php', type: 'post', dataType: "json", data: obj }).done(function (data) { if (data['go_l
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
});
我真的不明白为什么你有一个
。总是功能,但我想你可以试试这个:
$.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");
}
}
正如名字所说,'always',.always()在成功或失败两种情况下都会执行。您不希望在成功状态下执行。始终(),但在失败状态下执行,这是不可能的。在ajax响应上调用三种方法,即.done()、.fail()和.always()。一旦ajax完成,[.done()和.alway()成功就会触发所有方法,否则.fail()和.always()]。我们知道jquery/js是异步的,所以即使是任何其他方法中的return语句也不能停止.always()的执行。在您的情况下,唯一的选项是不要使用.always()方法。执行状态success或failure,.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
中执行的操作是什么?为什么不在成功时中断并返回您的页面,即30X
HTTP代码?或者JSON有一个go_location
变量?JSON有一个go_location变量,如browse.html,即数组['go_location']='browse.html'@Dipak,不确定您的意思。这也许是一个答案?成功与成功一样吗?从文档中不清楚所有这些处理程序之间的区别。done.always我不太熟悉。done
和。总是,但是。当服务器向AJAX调用发送响应时,success
会被执行。我想,success是不可取的。你说,done总是在之前运行。总是(假设ajax请求成功)?两者都是按链接顺序触发的。正如我提到的,Jquery是异步的,.always()不会等待.done()的终止。