保持 textarea 与服务器文本文件同步的最佳方法

Posted

技术标签:

【中文标题】保持 textarea 与服务器文本文件同步的最佳方法【英文标题】:Best way to keep textarea synced with server text file 【发布时间】:2013-04-26 23:46:00 【问题描述】:

您好,我正在制作一个简单的应用程序,用户可以在其中将信息输入到文本区域,而不必担心保存或丢失信息。我正在使用 jquery/javascript 来检测对文本区域的更改,然后使用 ajax 将值发送到 php 以写入服务器。我有一些基本的“忙”锁来防止重叠的ajax。但是,我发现它有点不可靠。有一个更好的方法吗?

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);


【问题讨论】:

我看到的最大问题是,如果两个用户同时编辑文件,它将不同步,除非您经常从服务器。 您的第一个最佳选择是每隔 30 秒在计时器上“监控”一次更改。不要在每次有变化时都尝试更新。其次,你不需要像在jQuery中那样分配函数,你可以,但不需要,你可以将该行重写为$('#text').bind('input propertychange', save); 【参考方案1】:

我会这样做:http://jsfiddle.net/z4rjQ/

为调用此函数的文本更改保存一个监听器:

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

此函数清除计时器并设置另一个。

换句话说,直到用户在 5 秒内没有按键(可调整),才会保存。

这将允许您不发送数千个 ajax 保存,而是在他完成输入后发送一个。

【讨论】:

以上是关于保持 textarea 与服务器文本文件同步的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

textarea保持文本样式

iOS IMAP 同步与 MailCore 最佳实践

在 textbixes 和 textareas 中显示默认文本的最佳方法是啥

在 textbixes 和 textareas 中显示默认文本的最佳方法是啥

Javafx 8 替换 textarea 中的文本并保持格式

在波形上显示波形文件播放进度的最佳方式