Por que meu onbeforeunload não correr agora, quando era antes? Ou AJAX falhando em segundo comando idênticos?

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

  •  05-09-2019
  •  | 
  •  

Pergunta

Este surge na sequência este pergunta

Este foi de trabalho:

<body onbeforeunload=
 "ajaxRequest('UnlockQuery.ashx?QueryID=266&UserID=11631');"> 

Esta foi criada usando o seguinte na página aspx:

<body onbeforeunload=
 "ajaxRequest('UnlockQuery.ashx?QueryID=<%= Session["QueryId"] %>&
 UserID=<%= Session["UserID"] %>')">

Esta é não de trabalho:

<body id="uxBodyTag" onbeforeunload=
 "ajaxRequest('UnlockQuery.ashx?QueryID=266&amp;UserID=11631');"> 

Isto é criado usando:

uxBodyTag.Attributes["onbeforeunload"] += 
 "ajaxRequest('UnlockQuery.ashx?QueryID=" + 
 queryId.ToString() + "&UserID=" + Session["UserID"].ToString() + "');";

O código a ser chamado é o seguinte:

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:

Parece única falhar quando chamadas subsequentes são feitas para o mesmo desbloqueio. Acho que isso pode ser um problema AJAX ....

Foi útil?

Solução

Adicionando

&date=DateTime.now.Ticks.ToString()

parece ter corrigido isso. Eu não acho que o IE7 gosta quando a mesma chamada AJAX vem e a anterior não foi "resolvido" (a página é descartado antes da chamada AJAX retorna).

Obrigado a todos que forneceu ajuda.

Outras dicas

Para os meios de depuração, nós tentamos:

alert(url);
xmlhttp.open("GET",url,true);

que deu o resultado esperado:

UnlockQuery.ashx?QueryID=319&UserID=11648

Agora podemos verificar o que o servidor tem a dizer através de:

xmlhttp.onreadystatechange = function() { 
  if (this.readyState == 4) alert(this.status + ": " + this.StatusText); 
};

EDIT:

Como se vê, o cache do navegador foi a razão para os resultados inesperados. Sugiro para proibir o cache de página AJAX através de cabeçalhos HTTP apropriados (Pragma, Cache-Control, Expires).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top