我有一个通过XMLHttpRequest()对象执行的ajax请求
我的AJAX方法以这种格式调用:
var xmlhttp = new XMLHttpRequest();
$(document).ready(function () { LoadData(); });
function LoadData()
{
var parameters = "DisplayData=true";
var url = "default.aspx";
Send(url, parameters, "DisplayData");
CheckForAbort();
}
function Send(url, parameters, QueryType)
{
...
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-lencoded");
xmlhttp.send(parameters);
xmlhttp.onreadystatechange = function (){...}
}
页面上还有一个计时器,它通过发送(...)方法以15秒的间隔发出新请求来刷新数据。每隔.3秒,它会调用一个 Elipsis()方法,显示并“闪烁”“加载消息”(如果适当显示)并检查中止。
var Color = "red";
function Elipsis() {
if (ResponseMessage != "")
{
if (Color == "darkred") { Color = 'red'; } else { Color = 'darkred'; }
$("#StatusResponse").css("display", "block");
$("#StatusResponse").css("color", Color);
CheckForAbort();
}
}
function CheckForAbort()
{
console.log("MenuActivted: " + MenuActivted);
if (MenuActivted)
{
xmlhttp.abort();
ResponseMessage = "Aborting Request";
MenuActivted = false;
}
}
但是当用户点击菜单栏时,该菜单栏是HREF设置为另一页的锚标签。在ajax请求完成获取后,浏览器不会响应。
在ASPX页面上以下列方式调用HTML HREF:
<a href="<%#Eval("NavigateUrl")%>" onclick="AbortAjax();window.location='<% #Eval("NavigateUrl")%>';"><%#Eval("Text")%></a>
Ajax Abort设置在 CheckForAbort()方法中检查的标志:
var MenuActivted = false;
function AbortAjax()
{
MenuActivted = true;
return false;
}
我在Win 7上运行IE 11.我在代码的另一部分调用了abort()方法。执行xmlhttp.abort()。响应状态和就绪状态响应(控制台输出如下)但页面仍然等待响应HREF
控制台输出:
HTML1300:导航已经发生。
档案:ChangePassword.aspx
MenuActivted:true
ReadyState:4
状态:0
有没有人能解决这个问题? [更新**********]
我以为我有解决办法,但我没有。
我注释掉了 set 标头,但是虽然它允许我的HREF执行它,但是因为xhr抛出错误并且fetch正在终止。
xmlhttp.open("POST", url, true);
//xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(parameters);
请在回复之前阅读整篇文章。