¿Por qué mi onbeforeunload no se ejecuta ahora que antes?¿O AJAX falla en un segundo comando idéntico?
-
05-09-2019 - |
Pregunta
Esto sigue desde este pregunta
Este era laboral:
<body onbeforeunload=
"ajaxRequest('UnlockQuery.ashx?QueryID=266&UserID=11631');">
Esto fue creado usando lo siguiente en la página aspx:
<body onbeforeunload=
"ajaxRequest('UnlockQuery.ashx?QueryID=<%= Session["QueryId"] %>&
UserID=<%= Session["UserID"] %>')">
Esto es no laboral:
<body id="uxBodyTag" onbeforeunload=
"ajaxRequest('UnlockQuery.ashx?QueryID=266&UserID=11631');">
Esto se crea usando:
uxBodyTag.Attributes["onbeforeunload"] +=
"ajaxRequest('UnlockQuery.ashx?QueryID=" +
queryId.ToString() + "&UserID=" + Session["UserID"].ToString() + "');";
El código que se llama es este:
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);
}
}
EDITAR:
Parece que sólo falla cuando se realizan llamadas posteriores al mismo desbloqueo.Creo que esto puede ser un problema de AJAX...
Solución
Adición
&date=DateTime.now.Ticks.ToString()
parece haber arreglado. No creo que IE7 le gusta cuando la misma llamada AJAX entra y la anterior no ha sido "resuelto" (la página está dispuesto antes de que vuelva la llamada AJAX).
Gracias a todos los que la ayuda proporcionada.
Otros consejos
En los medios de depuración, tratamos:
alert(url);
xmlhttp.open("GET",url,true);
que dio el resultado esperado de:
UnlockQuery.ashx?QueryID=319&UserID=11648
Ahora podemos comprobar lo que el servidor tiene que decir a través de:
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4) alert(this.status + ": " + this.StatusText);
};
EDIT:
Como resultado, la caché del navegador fue la razón de los resultados inesperados. Sugiero a prohibir el almacenamiento en caché de la página a través de AJAX cabeceras HTTP apropiadas (Pragma
, Cache-Control
, Expires
).