Warum ist mein onbeforeunload jetzt nicht läuft, wenn es vorher war? Oder AJAX Fehler auf zweiten identischen Befehl?

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

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

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top