Pourquoi mon onbeforeunload ne fonctionne pas maintenant, quand il était auparavant? Ou AJAX défaut sur la deuxième commande identique?

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

  •  05-09-2019
  •  | 
  •  

Question

Ceci fait suite à cette question

était travail:

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

Il a été créé en utilisant ce qui suit dans la page ASPX:

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

pas travail:

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

est créé en utilisant:

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

Le code étant appelé est la suivante:

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:

Il semble échouer que lorsque les appels suivants sont faits au même déverrouillage. Je pense que cela peut être un problème AJAX ....

Était-ce utile?

La solution

Ajout

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

semble avoir fixé. Je ne pense pas que IE7 aime quand même appel AJAX est et le précédent n'a pas été « résolu » (la page est disposé avant le retour d'appel AJAX).

Merci à tous ceux qui fourni de l'aide.

Autres conseils

Pour les moyens de mise au point, nous avons essayé:

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

qui a donné le résultat attendu de:

UnlockQuery.ashx?QueryID=319&UserID=11648

Maintenant, nous pouvons vérifier ce que le serveur doit dire par:

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

EDIT:

Comme il se trouve, le cache du navigateur est la raison des résultats inattendus. Je suggère d'interdire la mise en cache la page AJAX par en-têtes HTTP appropriées (Pragma, Cache-Control, Expires).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top