我在单页上有多个富文本编辑器。 通过独立的ajax调用完成两者的自动保存。 每个文本编辑器都会在失去焦点或每20秒内焦点位于编辑器内时保存。
当编辑器未保存且用户导航离开时,我正在显示"导航警告"。
现在我需要管理警告,当一个编辑器处于保存状态而另一个编辑器完成之前的警告时,将不会删除。
我现在拥有的:
editorOneIsSaving=true;
SetNavigateAwayNotification();
$.ajax({ type: "POST", contentType: "application/json",
dataType: 'json', url: "/SaveEditorOne",
data: mypostdata1,
success: function (msg) {
editorOneIsSaving = false;
if (!editorTwoIsSaving) {
RemoveNavigatingAwayNotification();
}
updateSavedInfo();
},
});
第二位编辑:
editroTwoIsSaving=true;
SetNavigateAwayNotification();
$.ajax({ type: "POST", contentType: "application/json",
dataType: 'json', url: "/SaveEditorTwo",
data: mypostdata2,
success: function (msg) {
editorTwoIsSaving = false;
if (!editorOneIsSaving) {
RemoveNavigatingAwayNotification();
}
updateSavedInfo();
}
});
我正在考虑将对象添加到数组或列表,但它在javascript中并不是很好。这样我就会知道谁是锁的所有者,或者如果有更多的编辑器,我可以确保同一个编辑器没有多次锁定。
也许我只是在思考,我应该使用简单的计数器,如果为0则移除导航。
答案 0 :(得分:0)
执行此操作的一种方法是为每个ajax调用添加一个计数器以进行保存。 在将数据发送到服务器之前递增计数器并在承诺中递减它。
类似于以下内容
function showSavingMessage(){
//code to show message
}
function removeSavingMessage(){
// code to remove message
}
var ctr = 0;
function saveData(){
showSavingMessage();
ctr++;
$.ajax({ type: "POST", contentType: "application/json",
dataType: 'json', url: "/SaveEditorXXX",
data: mypostdata2,
success: function (msg) {
if (ctr > 0){
ctr--;
} else {
removeSavingMessage();
}
}
});
}
您可以随意处理错误。可能会将“保存”消息更改为错误消息。
您还可以将url和数据传递给saveData函数以使其可重用,因此您只需要一个带有Ajax代码的函数。