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