【问题标题】:how to abort a xmlhttprequest before starting a new request?如何在开始新请求之前中止 xmlhttprequest?
【发布时间】:2012-12-06 11:03:01
【问题描述】:

我有一个 cgi 脚本,它根据它提交的查询字符串执行搜索。 这一切都很好。 但是由于搜索可能需要一些时间,并且用户可能会开始另一个搜索。我希望在开始第二次搜索之前中止第一次搜索,但是如果我在 AJAXRequest 函数的开头插入 xmlhttp.abort(),则 cgi 脚本根本不会启动。 谁能告诉我这是怎么做到的?

提前致谢!

这里是 AJAX 代码 sn-p

var xmlhttp;
function AJAXRequest()
{

   if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
   window.document.getElementById("resultlist").innerHTML=xmlhttp.responseText;
}
}
var queryString= "from=03-01-2006&to=04-30-2006&pattern=345";
xmlhttp.open("POST","../cgi-bin/search.exe?"+queryString);
xmlhttp.send();
}

【问题讨论】:

  • xmlhttp.open("POST","../cgi-bin/search.exe?"+queryString,true); - 实际上true 参数是不需要的,因为这个值默认是true
  • @EvgeniyNaydenov 我删除了第三个参数

标签: javascript ajax web-applications xmlhttprequest


【解决方案1】:

是的,XMLHttpRequest.abort() 是用于 AJAX 请求中止的正确方法。 在我看来,您的问题更多的是设计问题,而不是技术问题。 因此,我的建议是查看用户如何与您的应用程序交互的流程。 例如,经典的解决方案是在您的请求未完成时显示进度条或微调器并禁用“搜索”按钮,并在成功或错误时恢复此状态。

【讨论】:

  • 感谢您的建议。我会考虑类似的事情但是有没有办法在开始新的搜索之前先中止主动搜索?(以防有人输入了错误的搜索信息)我刚刚发现如果我在 send() 之后使用 abort() ) 发送另一个请求,中止工作得很好。但是,如果我在函数的开头使用 abort() ,它似乎根本不会发送请求。您有什么建议吗?
  • 我发布的链接的文档说:“如果请求已经发送,则中止请求。”。所以abort() 方法在send() 之前不起作用。因此,如果您要进行某种自动完成,您应该在发送请求之前阻止用户界面和/或在输入后使用一些超时。
【解决方案2】:

我发现了我的问题。 我试图中止刚刚创建的请求对象。该对象必须是全局的。至少这是我看到如何实现这一目标的唯一方法。

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 1970-01-01
    • 2020-09-24
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多