我有一个 JavaScript 表单,用于保存对 <textarea>
所做的更改通过ajax调用到我的服务器。我希望让事情变得简单,并已连接 change
和keyup
事件并相应地触发对我的服务器的调用。
当多个重叠调用开始导致我的数据库出现乐观并发问题时,就会出现问题。 (带有 RowVersions 的 SQL 2008)。
- 有没有什么办法可以让 ajax 调用排队,这样我就不会同时进行多个调用?
- 更好的方法是使用计时器而不是更改事件。每2秒更新一次?确保最终更新
onBlur
? - 这是否最好在服务器上处理,因为多个客户端(虽然不太可能)仍然可能导致相同的问题。那会是什么样子?
最佳答案
减少调用次数的一种方法是延迟 ajax 调用几秒钟,看看用户是否会继续输入。你的change/keyup监听器的主体中会有类似这样的内容:
if(timeoutId){
// prevent last timeout from sending the ajax call
clearTimeout(timeoutId);
timeoutId = 0;
}
timeoutId = setTimeout(sendAjaxToSaveState,delayInMilliseconds);
您还应该发送一个关于模糊的 ajax 调用,就像您在第二个选项中提到的那样。
关于javascript - 有关更改排队/后端数据库更新的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14697280/