2011-12-12 207 views
1

我:取消XHR请求

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

在网站/ send.php我:

sleep(1000) 
echo "OK"; 

接下来,我在我的js文件:

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

和复位.php:

echo "RESET"; 

在这个例子中,我有XHR直到睡眠< 1000.在Firebug中我看到了这个。我没有响应和成功的函数send(),直到睡眠为< 1000.这是好的,但我想取消这个请求,如果我使用.click()。

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

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

+1

你可以有一个中间PHP脚本来管理任务。所以,你调用AJAX函数,然后调用Manager.php脚本。然后,Manager.php脚本运行更多的Worker1.php,Worker2.php,.. WorkerX.php脚本(并且不会等待它们完成,只需使用CLI启动它们),它们将执行工作并更新工作状态数据库表。在此之后,您可以使用AJAX轮询来检查状态一次和一段时间,并且您可以将工作人员标记为在状态表中执行(然后您检查工作人员)。这是一个工作,但希望它有助于:) – Catalin

+0

谢谢,请给我简单的例子:) –

回答

4

您必须保留对XHR对象的引用,以便中止它。

事情是这样的:

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

然后中止:

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

虽然我真的不确定的语法。

你可能想看看somesimiliarquestions

5

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