Почему мой onbeforeunload не работает сейчас, когда он был раньше? Или AJAX не работает на второй идентичной команде? - PullRequest
0 голосов
/ 19 февраля 2009

Это следует из этого вопроса

Это было работает:

<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);
    }
}

EDIT:

По-видимому, происходит сбой только тогда, когда последующие вызовы сделаны для той же разблокировки. Я думаю, что это может быть проблема AJAX ....

Ответы [ 2 ]

1 голос
/ 19 февраля 2009

Добавление

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

, кажется, исправил это. Я не думаю, что IE7 нравится, когда поступает один и тот же вызов AJAX, а предыдущий не был «разрешен» (страница удаляется до возврата вызова AJAX).

Спасибо всем, кто оказал помощь.

1 голос
/ 19 февраля 2009

Для средств отладки мы попробовали:

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); 
};

EDIT:

Как оказалось, кеш браузера стал причиной неожиданных результатов. Я предлагаю запретить кэширование страницы AJAX через соответствующие заголовки HTTP (Pragma, Cache-Control, Expires).

...