2013-02-11 29 views
1

我試圖使用$ .post發送表單數據到服務器端腳本來保存,如果用戶試圖離開頁面而不提交表單。我使用附加到保存按鈕的相同功能,並將setInterval設置爲每2分鐘一次,並且它工作正常。但是當我將函數附加到document.onbeforeunload時,它不起作用。在firebug中,我看到請求正在發送,但它看起來像是在狀態碼返回並且頁面繼續卸載之前停止。我對JavaScript和Jquery仍然很陌生,我不確定是否可能$ .post是那些可能無法在onbeforeunload事件中工作的函數之一。如果這是真的,如果用戶試圖離開頁面而不保存,我還有另外一種方式發送數據嗎?

This is the function I am calling from the onbeforeunload event: 

      function ajaxSubmit(){ 
       var blogtitle = $("#title").val(); 
       var publishedstate = 0; 
       var blogid = $("#blogID").val(); 
       var blogbody = CKEDITOR.instances['body'].getData(); 

       var postdata = {ajaxSubmit:true,title:blogtitle,body:blogbody,published:publishedstate,blog_id:blogid}; 
       $.post('ajaxblog.php',postdata,function(data){ 
        $("#autosaveMessage").html(data); 
        $("#autosaveMessage").show(); 
        setTimeout(function(){$("#autosaveMessage").hide();},5000); 
       }); 
      } 

,這是怎麼了調用該函數:

   var post_clicked = false; 
      $("#postButton").click(function(){ 
       post_clicked = true; 
      }); 

      function leaveEditor(){ 
       if(post_clicked==false){ 
        ajaxSubmit(); 
       } 
       else{ 
        //Do Nothing 
       } 
      } 

window.onbeforeunload = leaveEditor; 
+0

我想我的問題是我對onbeforeunload事件的誤解。顯然,如果你爲它附加一個函數,它會查找一個returnValue對象,特別是一個用於確認框的字符串。如果它沒有得到返回值,則繼續刪除資源並卸載頁面。以爲我會把這件事情在任何人遇到同樣的問題。試過沒有把回調函數,setTimeout,都沒有工作。我會用確認框和一切工作,但如果有人知道一個解決方法,所以我不必確認框,我會很感激洞察力。 – kgarrigan 2013-02-12 15:52:38

回答

1

沒有,這是由設計。如果一個頁面可以使用onbeforeunload來無限期地延遲瀏覽,以某種方式堅持其存在,等等,網頁瀏覽器的用戶最重要的能力之一是能夠請假

只需使用stringy返回值 - 它的全部要點是提醒用戶他/她進行了將會丟失的更改。就像這樣:)

+0

謝謝,我有點認爲這可能是這樣的情況後,我讀了onbeforeunload事件一點。這說得通。 – kgarrigan 2013-02-12 19:28:57

相關問題