2013-06-30 33 views
1

我想爲我的網站實現自動保存功能。
我的意思是,我希望用戶在整個網站編輯的所有字段都應該自動保存,不需要點擊任何按鈕。所以用戶可以繼續編輯。使用JQuery AJAX的AutoSave體系結構

[網站設計使用:CodeIgniter和JQuery]。

此功能,我正在執行如下。

1.在javascript中創建了一個隊列數據結構,並且我正在推送用戶所做的所有更改。所以這就像一個持有所有用戶變化的對象。

2.然後寫了一個函數來保存這個隊列的內容到數據庫。

function start(){ 
var changeData = dq.get(); //getting the data from Queue 

    while(changeData !== undefined){ 
    $.ajax({ 
     type: 'POST', 
     url: '/ci/ajax/insert/', 
     data: {changeData}, 
     success: function(data, status, xml){ 
     alert('succefully inserted data -- '+data); 
     } 
    }); 
    changeData = dq.get(); 
    } 

    setTimeout(function(){ start(); }, 5000); 
}; 

start(); 

這裏我將間隔設置爲5秒。

問題是,我在5秒內做了兩次或多次更改,但只有第一次更改正在更新。但是,根據我所做的更改,我獲得了2次或更多次警報。

在哪裏,我錯了?

也建議我實現自動保存功能的更好方法。

謝謝!

+0

負載相信的setTimeout()應該在回調 - 否則,你可以調用一個多個異步方法第一個返回數據之前。 – OzrenTkalcecKrznaric

+0

這是我能找到的解決方案之一。 http://stackoverflow.com/a/1060784/1841369 –

+0

你正在嘗試處理併發的Ajax請求,而你應該防止這種情況。最簡單的方法就是發送請求,等待響應,並在您收到響應時間安排的下一個請求。否則可能會發生請求重疊,您需要排隊或某種同步方法來解決該問題。 – OzrenTkalcecKrznaric

回答

1

您應該在success方法中定義setTimeout這樣做會很好,因爲當您的第一個請求完成後,會生成第二個請求,否則將不會等待服務器響應併發送否。的請求它可以增加你的服務器

function start(){ 
var changeData = dq.get(); //getting the data from Queue 

    while(changeData !== undefined){ 
    $.ajax({ 
     type: 'POST', 
     url: '/ci/ajax/insert/', 
     data: {changeData}, 
     success: function(data, status, xml){ 
    setTimeout(function(){ start(); }, 5000);// defines when first request is accomplished 
     alert('succefully inserted data -- '+data); 
     } 
    }); 
    changeData = dq.get(); 
    } 


}; 

start();