それは前にいたのに、なぜ私のonbeforeunloadは現在実行されていませんか?またはAJAXは、第二の同一のコマンドで失敗しますか?

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

  •  05-09-2019
  •  | 
  •  

質問

これはこののに続くもの質問

この に働いていた。

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

このはaspxページで、次を使用して作成されました。

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

このあるの のない労働ます:

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

このは使用して作成されます:

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

と呼ばれているコードは、この次のとおりです。

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ます:

後続の呼び出しが同じロックを解除するために行われたときにのみ失敗するように見えます。私は、これはAJAXの問題かもしれないと思う....

役に立ちましたか?

解決

の追加

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

それを修正しているようです。同じAJAX呼び出しが入ると、以前は「解決」されていないとき、私は(ページがAJAX呼び出しが戻る前に配置されている)IE7はそれを好きとは思わない。

ヘルプを提供しているすべてに感謝します。

他のヒント

デバッグの手段のために、私たちが試した

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

の期待される結果を与えた:

UnlockQuery.ashx?QueryID=319&UserID=11648

今、私たちは、サーバーが経由言っているかどうか確認することができます

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

EDITます:

結局のところ

、ブラウザのキャッシュには、予期しない結果の理由でした。私は、適切なHTTPヘッダ(PragmaCache-ControlExpires)を通じてAJAXページをキャッシュ禁止することをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top