2016-06-02 7 views
0

У меня есть несколько текстовых редакторов на одной странице. Существует автосохранение обоих выполняемых ajax-вызовов, которые являются отдельными. Каждый текстовый редактор сохраняется при утере фокуса или когда фокус находится внутри редактора каждые 20 секунд.Заблокировать множественные вызовы ajax

Когда редактор не сохранен, и пользователь переходит от него, я показываю «navigate away warning».

Теперь мне нужно управлять предупреждением о том, что когда один редактор находится в середине сохранения, а другой заканчивается, предыдущее предупреждение не будет удалено.

Что я сейчас:

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

Один из способов сделать это - добавить счетчик для каждого вызова 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.

Смежные вопросы