Jquery ajax调用后重定向并跳过。始终

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

我有一个来自jquery的标准ajax调用,如下所示

我想检查返回的json数组是否正在请求一个新页面,如果是,请转到那里,不要执行.always回调

有没有一个简单的方法可以做到这一点

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()的终止。