Почему мой onbeforeunload не работает сейчас, когда это было раньше?Или AJAX не работает при второй идентичной команде?
-
05-09-2019 - |
Вопрос
Это следует из этот вопрос
Этот был работающий:
<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&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....
Решение
Добавление
&date=DateTime.now.Ticks.ToString()
вроде исправил.Я не думаю, что IE7 нравится, когда поступает тот же вызов AJAX, а предыдущий не был «разрешен» (страница удаляется до возврата вызова AJAX).
Спасибо всем, кто оказал помощь.
Другие советы
В качестве средств отладки мы попробовали:
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);
};
РЕДАКТИРОВАТЬ:
Как выяснилось, причиной неожиданных результатов стал кеш браузера.Предлагаю запретить кэширование AJAX-страницы через соответствующие HTTP-заголовки (Pragma
, Cache-Control
, Expires
).