【问题标题】:Cancel XHR request取消 XHR 请求
【发布时间】:2012-01-18 07:34:06
【问题描述】:

我有:

function send(){
  $.get("/site/send.php", function(data){
    alert(data);
  }
}

在 site/send.php 我有:

sleep(1000)
echo "OK";

接下来我的 js 文件中有:

send();
$("#click").click(function(){
  $.get("/site/reset.php", function(data){
    alert(data);
  }
})

在reset.php中:

echo "RESET";

在这个例子中,我有 XHR 直到 sleep

现在我有所有时间函数 send() 并且直到她没有停止 (> 1000) 然后我没有使用 .click() 函数开始。为什么这不是异步的?

这可能吗?也许可以取消网站上的所有请求?

【问题讨论】:

  • 您可以有一个中间 PHP 脚本来管理这些任务。因此,您调用 AJAX 函数,该函数又调用 Manager.php 脚本。 Manager.php 脚本然后运行更多的 Worker1.php、Worker2.php、..WorkerX.php 脚本(并且不等待它们完成,只需使用 CLI 启动它们)来完成工作并更新工作状态数据库表。在此之后,您可以使用 AJAX 轮询不时地检查状态,并且您可以在状态表中标记一个工作人员以 sop 执行(依次检查工作人员)。这有点工作,但希望它有所帮助:)
  • 谢谢,请给我简单的例子:)

标签: php javascript jquery ajax xmlhttprequest


【解决方案1】:

您发出的每个请求实际上都是一个单独的实例或线程。您不能通过发出另一个请求来取消一个请求。您可以做的是取消客户端的当前请求。阅读this question

【讨论】:

    【解决方案2】:

    您必须保留对 XHR 对象的引用才能中止它。

    类似这样的:

    var myXhr = null;
    $("#click").click(function(){
      myXhr = $.get("/site/reset.php", function(data){
        alert(data);
      });
    })
    

    然后中止:

    if (myXhr) {
      myXhr.abort();
    }
    

    虽然我真的不确定语法。

    你可能想看看somesimiliarquestions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 2011-12-22
      • 2017-03-21
      相关资源
      最近更新 更多