2013-05-02 60 views
0

嗨我正在做一個簡單的應用程序,用戶可以在文本區域鍵入信息,而不必擔心保存或丟失它。我正在使用jquery/javascript檢測文本區域的更改,然後使用ajax將值發送到php以寫入服務器。我有一些基本的「繁忙」鎖定來防止重疊Ajax。但是,我發現它有點不可靠。有一個更好的方法嗎?保持textarea與服務器文本文件同步的最佳方式

var busy = false; 

function save() { 
if(busy === false) { 
    busy = true; 
    var content = $('#text').val(); 
    var file = 'store.txt'; 
    $.get("storecontent.php", { content_fromjq: content, file_fromjq: file}) 
    .done(function(data) { 

    busy = false; 
    }); 
} 
} 

$('#text').bind('input propertychange', function() { 
save(); 
}); 

PHP:

if (isset($_GET['content_fromjq'])) { 

$content = $_GET['content_fromjq']; 
$file = $_GET['file_fromjq']; 


$html = new DOMDocument(); 
$html->loadHTMLFile($file);  
$html->getElementById('content')->nodeValue = $content; 
$html->saveHTMLFile($file); 

} 
+0

我看到的最大問題是,如果兩個用戶同時編輯文件,它將不同步,他們會一直覆蓋對方的工作,除非您經常從服務器更新textarea。 – 2013-05-02 17:36:11

+0

你的第一個最好的選擇就是每隔30秒「監視」計時器的變化。每次改變時都不要嘗試更新。其次,你不需要像jQuery那樣設計funcs,你可以,但不需要,你可以將該行重寫爲$('#text')。bind('input propertychange',save);' – SpYk3HH 2013-05-02 17:36:12

回答

1

這裏是我會做:http://jsfiddle.net/z4rjQ/

除當文本改變調用此功能的監聽器:

function checkSave(){ 
    clearTimeout(timer); 
    timer = setTimeout(save, 5000); 
} 

此功能明確定時器並設置另一個。

換句話說,直到用戶沒有按住一個鍵5秒(可調整),就沒有保存。

這將允許你不發送一千個ajax保存,但是在他完成輸入之後發送一個。

相關問題