在AJAX完成异步提取之前,页面不响应HREF

时间:2015-08-24 13:45:09

标签: javascript jquery html ajax

我有一个通过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);

请在回复之前阅读整篇文章。

0 个答案:

没有答案