为什么我的onbeforeunload现在还没有运行呢?或者AJAX在第二个相同的命令上失败?

时间:2009-02-19 10:33:11

标签: asp.net ajax server-tags

以下是this问题

正在运作:

<body onbeforeunload=
 "ajaxRequest('UnlockQuery.ashx?QueryID=266&UserID=11631');"> 

这是使用aspx页面中的以下内容创建的:

<body onbeforeunload=
 "ajaxRequest('UnlockQuery.ashx?QueryID=<%= Session["QueryId"] %>&
 UserID=<%= Session["UserID"] %>')">

这是正在工作:

<body id="uxBodyTag" onbeforeunload=
 "ajaxRequest('UnlockQuery.ashx?QueryID=266&amp;UserID=11631');"> 

这是使用:

创建的
uxBodyTag.Attributes["onbeforeunload"] += 
 "ajaxRequest('UnlockQuery.ashx?QueryID=" + 
 queryId.ToString() + "&UserID=" + Session["UserID"].ToString() + "');";

被调用的代码是:

function ajaxRequest(url)
{
    xmlhttp=null;
    if (window.XMLHttpRequest)
    {   // code for all new browsers
        xmlhttp=new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {   // code for IE5 and IE6
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (xmlhttp!=null)
    {
        xmlhttp.onreadystatechange=null;
        xmlhttp.open("GET",url,true);
        xmlhttp.send(null);
    }
}

编辑:

当后续调用同一个解锁时,似乎只会失败。我认为这可能是一个AJAX问题......

2 个答案:

答案 0 :(得分:1)

对于调试方法,我们尝试了:

alert(url);
xmlhttp.open("GET",url,true);

给出了预期的结果:

UnlockQuery.ashx?QueryID=319&UserID=11648

现在我们可以查看服务器要说的内容:

xmlhttp.onreadystatechange = function() { 
  if (this.readyState == 4) alert(this.status + ": " + this.StatusText); 
};

编辑:

事实证明,浏览器缓存是意外结果的原因。我建议禁止通过适当的HTTP标头(PragmaCache-ControlExpires)缓存AJAX页面。

答案 1 :(得分:1)

添加

&date=DateTime.now.Ticks.ToString()

似乎已经解决了这个问题。我不认为当同一个AJAX调用进来时,IE7不喜欢它,并且之前没有“解析”(页面在AJAX调用返回之前被释放)。

感谢所有提供帮助。