繁体   English   中英

如何使用javascript取消http请求

[英]how to cancel http request using javascript

我有一个页面,其中有一个事件处理程序附加到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请求。 但为此我需要取消之前的请求。 我试过了

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+/替换为' ' ,但这似乎并不十分重要)。

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

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

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

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

CORS与Opera以外的所有主流现代浏览器兼容(http://caniuse.com/cors)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM