2012-02-02 64 views
2

我有以下代碼來檢測用戶導航或關閉。 後貼在關閉時觸發,但在導航時不會觸發。 如果我發出警報消息,它始終被觸發。爲什麼當用戶從頁面導航離開頁面時觸發Post back,但觸發關閉?

哦,並且頁面上有一個定時器,它在第一次打勾後實際上被禁用。但在使用eventtarget定時器導航時總會有一個後置觸發器。我想這可能是因爲我已經清除了上一頁的緩存。

<script src="Scripts/jquery-1.4.4.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(window).bind("beforeunload", function() { 
     alert("u r navigating away"); // this message gets triggered at all times. 
     __doPostBack('callPostBack'); 
    }); 
</script> 


    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
     { 
      string eventTarget = this.Request["__EVENTTARGET"]; 
      string eventArgument = this.Request["__EVENTARGUMENT"]; 

      if (eventTarget != String.Empty && eventTarget == "callPostBack") 
      { 
       //do task 
      } 

     } 
    } 

在此先感謝。

+0

http://stackoverflow.com/questions/680785/on-window-location-hash-change試試這個帖子它是一個jQuery解決方案 – Devjosh 2012-02-02 05:15:59

+0

@Devjosh:onhashchange沒有被解僱atall。 – Gnani 2012-02-02 06:44:52

+0

你測試過不同的瀏覽器嗎 – Devjosh 2012-02-02 07:01:15

回答

0

這是不合邏輯的,當用戶離開頁面或關閉頁面時,您實際上無法回覆帖子,想一想,用戶關閉了頁面,並嘗試用回帖重新載入頁面?如果你的行爲有效,那麼你有一個死循環,你回發並保持打開用戶嘗試關閉的頁面。無論如何,如果用戶關閉該頁面或更改它,這是第一優先級,並且回發不起作用。

如果您嘗試在那裏進行ajax調用,您也會失敗,因爲ajax在關閉頁面後停止並且這將在ajax觸發器之前完成(頁面關閉)。

您需要重新設計您的操作。

+0

我該怎麼辦?如果我想停止服務器上的一些運行功能,如果用戶導航。在完成服務器之前有一個web服務調用不會響應新的請求。我需要阻止這一點。感謝您抽出時間發帖。 – Gnani 2012-02-02 09:21:52

+0

@Gnani它的棘手。也許一個解決方案就是讓一個JavaScript定時器以10秒的時間觸發一個處理程序,如果這是停止調用處理程序,那麼用戶已經完成了。需要一點設計,添加一個唯一的關鍵字來知道這是開始這個​​會話的用戶。 – Aristos 2012-02-02 09:26:32

+0

@Gnani其他可能的方法是在pageunload上向用戶顯示一條消息,就在這條消息發出ajax調用之前。此時,在用戶按下對話框ok之前,ajax調用可能有時間通知服務器。 – Aristos 2012-02-02 09:28:03

相關問題