То, как заблокировать Ajax, функционирует от наложения?

У меня есть одна функция checkEvery15Seconds это работает каждые 15 секунд. Это проверяет, чтобы видеть, были ли новые комментарии добавлены к странице.

У меня есть форма, которая отправляет новый комментарий, после того как кнопка отправки нажимается, затем отображает новый комментарий к странице.

В процессе добавления нового комментария checkEvery15Seconds запрашивает базу данных одновременно, таким образом, я заканчиваю с дубликатом, комментирует страницу (не в базе данных, хотя, это - просто проблема JavaScript).

Как я могу заставить свою функцию "submitComment" останавливаться checkEvery15Seconds и перезапустите его после того, как функция "submitComment" закончит выполняться?

5
задан Martin Thoma 25 February 2015 в 16:05
поделиться

4 ответа

добавить логическое значение под названием some suspend15sCheck в область, доступную для обеих функций. включите его при добавлении комментария, а затем снова установите для него значение false.

в вашей функции 15sCheck сначала необходимо проверить, разрешено ли вам проверять: -)

var suspend15sCheck = false;

function addComment()
{
  suspend15sCheck = true;

  // add comment on base of form data

  suspend15sCheck = false;
}

function myTimer()
{
    if(suspend15sCheck === false) 
    {

      // add comments via ajax request
      // remember to check if the comments who will be added already exist :-)

    }
}
5
ответ дан 14 December 2019 в 19:10
поделиться

Вам понадобится переменная состояния, чтобы указать текущее состояние запроса ajax комментария

var requestComments = false;

if(requestComments === false) {
  requestComments = true;
  // make ajax request

  // on ajax success/fail
  requestComments = false;
}
0
ответ дан 14 December 2019 в 19:10
поделиться

Оберните его в объект, который позволяет другим функциям устанавливать на нем флаги запуска / остановки.

function My15SecondsObj() {
    var objSelf = this;

    // 
    this.run();
}

My15SecondsObj.Paused = false;
My15SecondsObj.prototype.run= function() { 
   if (!Paused)
   {
      // Do your call here
   }
   var _this = this;
   setTimeout(function() { _this.run(); }, 15000);

}

Теперь, когда вы хотите использовать этот объект, просто сделайте

var myObj = new My15SecondsObj();

, а когда вы захотите приостановить его,

myObj.Paused = true;

и запустите его снова, выполнив:

myObj.Paused = false;

Добавьте несколько событий, если вы действительно хотите сходить с ума, поэтому что другие объекты могут подписаться на уведомления об успешном обновлении базы данных и т. д.

0
ответ дан 14 December 2019 в 19:10
поделиться

Простейшее решение: используйте переменную пометки, которую вы включаете и выключаете. Первая строка вашей функции "checkEvery15Seconds" гласит: if (! Global_checkingEvery15Seconds) return;

Просто установите для этой переменной (как бы вы ее ни называли, глобальной или привязанной к объекту) значение true, когда вы хотите, чтобы проверка была включена, и выключайтесь, когда вы этого не сделаете.

0
ответ дан 14 December 2019 в 19:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: