2013-05-02 82 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保存,但是在他完成输入之后发送一个。

相关问题