在收到成功回调之前重定向用户

时间:2015-11-17 23:59:39

标签: php jquery ajax asynchronous

这是我的代码:

$.ajax( {
    type: "POST",
    url: "/script.php",
    data: { "action" : "importData" },
    cache: false,
    async: true,
    success: function() {
        window.location.href = "/next-page";
    }
} );

当用户登陆此页面时,ajax将触发php脚本,大约需要15秒才能完成。我没有让用户等待脚本完成然后重定向,而是希望获得某种类型的确认,即脚本已被触发,然后重定向用户而不等待整个脚本完成。脚本的结果直到工作流程后几分钟才会被使用。

这可能吗?怎么做?

1 个答案:

答案 0 :(得分:0)

$.ajax()返回XMLHttpRequest个实例:

var xhr = $.ajax({
  type: 'POST',
  url: '/script.php',
  data: {action: 'importData'},
  cache: false,
  success: function(){
    location = '/next-page';
  }
});
/* to test if problem is jQuery remove this line and take comments out
var px = xhr.onreadystatechange;
*/
xhr.onreadystatechange = function(){
  //if(px)px();
  if(xhr.readyState === 3 && xhr.status === 200){ // look at Properties -> https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
    // do stuff here with xhr.readyState less than 4
  }
}

可以找到有效的XMLHttpRequest.readyState属性值here

请注意,如果您重定向用户,则会停止当前页面上的JavaScript。您的用户重定向到的页面可能拥有自己的JavaScript。