锁定状态多个ajax调用

时间:2016-06-02 21:06:28

标签: javascript ajax

我在单页上有多个富文本编辑器。 通过独立的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则移除导航。

1 个答案:

答案 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代码的函数。