2012-02-01 123 views
0

嗨我使用JavaScript來保存信息後,頁面將要關閉或導航到另一個頁面。我的問題是,當我打電話給window.onbeforeunload webservice它不會開火,我沒有得到結果。但是如果我把警報在函數Web服務會解僱的結束,我得到result.I不希望在所有。就是使用警報有任何way.my代碼如下:Javascript的window.onbeforeunload不工作沒有警報

window.onbeforeunload = InitializeService; 
    function InitializeService() { 
     if (window.XMLHttpRequest) { 

      var url = "http://localhost:54329/WebServices/PageUnloadCall.asmx?op=Page_Unload"; 

      myReq.onreadystatechange = checkStatus1; 

      myReq.open("GET", url, true); // true indicates asynchronous request 

      myReq.send(); 

     //  alert("Your Call Record Has Been Saved!"); 

    } 
    } 
    function checkStatus1() { 

     if (myReq.readyState == 4) // Completed operation 
     { 

      myReq.open("POST", "http://localhost:54329/WebServices/PageUnloadCall.asmx/Page_Unload", false); 

      myReq.send(); 

     } 
    } 

正如你可以在函數InitializeService中看到,我不想在那裏使用Alert,但是如果我不用,我不會得到結果。

+1

你永遠不會得到請求或警報只是允許異步調用完成?設置爲false,看看它是否適合你。 – OnResolve 2012-02-01 21:17:13

+0

謝謝,這是唯一的原因。我試着從3小時謝謝。 – Hiren 2012-02-01 21:19:56

回答

0

該警報允許異步呼叫完成允許響應。變化:

myReq.open("GET", url, true); 

到:

myReq.open("GET", url, false); 
0

這將是因爲onbeforeunload早在您的web服務調用返回之前就已完成(完成,完成)。你的web服務調用被啓動,它可能到達服務器(檢查服務器日誌;添加一個日誌調用來驗證),但瀏覽器決定不等待 - 這是有目的的,因爲用戶正在離開頁面。

如果你唯一的目標是報告這個事件,你可能沒有問題(因爲你可能會得到它),但是如果你打算在AFTER之後做任何事情,看看它是否會工作,如果你改變那個行爲服務呼叫同步:

myReq.open("GET", url, false); 
0

嘗試同步的請求(不知道是否它會工作):

myReq.open("GET", url, false); // false => synchronous request 

應引起unbeforeunload處理等待在返回之前調用完成,並讓卸載繼續。