Почему мой onbeforeunload не работает сейчас, когда это было раньше?Или AJAX не работает при второй идентичной команде?

StackOverflow https://stackoverflow.com/questions/564676

  •  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&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....

Это было полезно?

Решение

Добавление

&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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top