如何使用javascript取消HTTP请求



我有一个页面,上面有一个事件处理程序附加到一个onclick事件。当事件触发时,它将文本框的内容传递给GET请求。由于 url不在同一域,所以我创建了一个脚本标签,并将url附加到其源,如

elem.onclick=fire;
function fire()
{
var text=document.getElementById('text').value;
var script=document.createElement("script");
script.className="temp";
script.src="some url"+"?param="+text;
document.body.appendChild(script);
}

现在,如果该事件被触发并且不止一次,我想取消所有以前的GET请求(因为它们仍然可能正在接收响应)并使用最新文本制作GET请求。但为此,我需要取消之前的请求。I tried

document.body.removeChild(script);
script.src=null;

但这在Firefox(我使用Firefox 5)中不起作用,尽管这在Google Chrome 中有效。有人知道这些请求是否可以在Firefox中取消,如果可以,那么如何取消?


正如Alfred所建议的,我使用window.stop来取消请求,但不是取消请求,而是挂起请求。这意味着当我查看firebug时,它看起来像是正在发出请求,但没有响应。

解决方案很简单:对于创建HTTP请求,使用<img>而不是<script>元素。此外,您总是必须更改相同元素的src属性。

var img;
function fire()
{
    var text = document.getElementById('text').value;
    var im = img || (img = new Image());
    im.src = "url"+"?param="+text;
}

你可以确定它实际上通过做以下工作:你请求的URL应该有一个巨大的响应时间(你可以确保这使用例如PHP的sleep函数)。然后,在Firebug中打开Net选项卡。如果多次单击该按钮,您将看到所有未完成的请求都被中止。

这完全是即兴的,但如果脚本标记还没有加载完成,您可以简单地使用script.parentElement.removeChild( script )。这或多或少就是mootools所做的。(从技术上讲,他们首先用' '替换/s+/,但这似乎不是非常重要)。

使用JS框架可以吗?如果是这样,MooTools在其请求中内置了此功能。JSONP对象

我不确定这是否是你要找的,但它似乎是一个类似的问题:http://www.velocityreviews.com/forums/t506018-how-to-cancel-http-request-from-javascript.html

要绕过跨域问题,您可以使用CORS代替(假设您可以更改服务器上的内容):http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

如果这样做,那么可以使用更标准的XMLHttpRequest的abort()函数。

CORS兼容所有主要的现代浏览器,除了Opera (http://caniuse.com/cors)。

相关内容

  • 没有找到相关文章

最新更新