2015-12-30 2 views
0

Я использую таймер таймера обратного отсчета jquery (http://keith-wood.name/countdown.html), чтобы отобразить время. Я вызываю функцию, чтобы добавить больше времени на событие обратного вызова 'onTick'. Когда время отсчитывается до 00:00:00, функция сделает вызов ajax, чтобы добавить дополнительное время. Он работает нормально, но каждый раз, когда таймер равен 00, ajax выполняет несколько вызовов (> 15). Как я могу заставить его отправить только один звонок? Я попытался сделать async: false, но все же он выполняет несколько вызовов. Спасибо.Как остановить AJAX, делая несколько вызовов?

$(this).countdown({ until: time, format: 'HMS', onTick: addExtraTime }); 

function addExtraTime() {  
if ($.countdown.periodsToSeconds(periods) === 00) { 
      var postValue = { ID: id } 
      if (!ajaxLoading) { 
       ajaxLoading = true; 
       $.ajax({ 
        url: "@Url.Action("AddExtraTime", "Home")", 
        type: 'post', 
       dataType: 'json', 
       contentType: "application/json", 
       data: JSON.stringify(postValue), 
       success: function() { 
        // show success 
       }, 
       error: function(data) { 
        // show error 
       } 
      }); 
      ajaxLoading = false; 
     } 
     } 
    } 

ответ

2

Вы установка ajaxLoading = false; даже когда Ajax запрос все еще делается, установите его ложным после выполнения запроса

 if (!ajaxLoading) { 
      ajaxLoading = true; 
      $.ajax({ 
       url: "@Url.Action("AddExtraTime", "Home")", 
       type: 'post', 
      dataType: 'json', 
      contentType: "application/json", 
      data: JSON.stringify(postValue), 
      success: function() { 
       // show success 
      }, 
      error: function(data) { 
       // show error 
      } 
      complete: function(){ 
       ajaxLoading = false; 
      } 
     }); 
     //ajaxLoading = false; 
    } 
4

У вас есть переменный, ajaxLoading, который используется для определения, если запрос Ajax находится в полешь, но вы установите его в falseсразу после вызова$.ajax() вместо того, чтобы, когда вы получите ответ. Установите его на false внутри вашего успеха и обработчиков ошибок.

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