¿Por qué mi onbeforeunload no se ejecuta ahora que antes?¿O AJAX falla en un segundo comando idéntico?

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

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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top