Warum ist mein onbeforeunload jetzt nicht läuft, wenn es vorher war? Oder AJAX Fehler auf zweiten identischen Befehl?
-
05-09-2019 - |
Frage
Dies folgt auf diese Frage
Das war Arbeits:
<body onbeforeunload=
"ajaxRequest('UnlockQuery.ashx?QueryID=266&UserID=11631');">
Dies wurde die folgende in der Aspx-Seite erstellt werden:
<body onbeforeunload=
"ajaxRequest('UnlockQuery.ashx?QueryID=<%= Session["QueryId"] %>&
UserID=<%= Session["UserID"] %>')">
Dies ist nicht Arbeits:
<body id="uxBodyTag" onbeforeunload=
"ajaxRequest('UnlockQuery.ashx?QueryID=266&UserID=11631');">
Dies wird erstellt mit:
uxBodyTag.Attributes["onbeforeunload"] +=
"ajaxRequest('UnlockQuery.ashx?QueryID=" +
queryId.ToString() + "&UserID=" + Session["UserID"].ToString() + "');";
Der Code aufgerufen wird, ist dies:
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:
Es scheint nur fehlschlagen, wenn nachfolgende Aufrufe den gleichen Unlock vorgenommen werden. Ich denke, dies kann ein AJAX Problem sein ....
Lösung
Hinzufügen
&date=DateTime.now.Ticks.ToString()
scheint es behoben zu haben. Ich glaube nicht, IE7 mag es, wenn der gleiche AJAX Anruf eingeht und die vorherige wird nicht „aufgelöst“ (die Seite, bevor die AJAX-Aufruf zurückkehrt angeordnet ist).
Dank allen, die zur Verfügung gestellt Hilfe.
Andere Tipps
Für den mittels Debugging, wir versuchen:
alert(url);
xmlhttp.open("GET",url,true);
, die ergab das erwartete Ergebnis:
UnlockQuery.ashx?QueryID=319&UserID=11648
Jetzt können wir überprüfen, was der Server durch zu sagen hat:
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4) alert(this.status + ": " + this.StatusText);
};
EDIT:
Wie sich herausstellte, war der Browser-Cache der Grund für die unerwartete Ergebnisse. Ich schlage vor, Caching der AJAX Seite durch entsprechende HTTP-Header zu verbieten (Pragma
, Cache-Control
, Expires
).