2015-10-20 4 views
0

Мне нужно запустить функцию по завершении уже запущенного ajax на странице. Функция, которую я хочу обновить, будет обновлять счетчик элементов списка желаний, а функция, которая была ранее запущена, сохраняет элемент в списке пожеланий.Выполнять completeAjax только один раз

Проблема (что я выяснил) - после выполнения (инициализации) ajax-запроса, ожидая успеха msg, функция снова выполняет себя.

Нижняя линия, я хочу, чтобы часть функции ajaxComplete запускалась только один раз. Пожалуйста, укажите мне в правильном направлении

jQuery(document).ready(function() { 

    var token = false; 

    jQuery('.add_to_wishlist').on('click', function() { 

      if(token == false) { 

       jQuery(document).ajaxComplete(function() { 

        console.log('Entered Click!'); 

        token = true; 

        jQuery.ajax({ 

         url: wishajax.ajax_url, 
         data: { 
          action: 'vg_inject_wish', 
         }, 
         success: function(response) { 

          console.log('Entered Success!'); 

          jQuery('.wishlist-container').html(response); 

          console.log('After Success!'); 

          token = true; 

         } 

        }); 

       }); 

      } 
    }); 

}); 
+0

, что насчет 'complete: function (response) {..' перед 'успехом' См. Https://api.jquery.com/Ajax_Events/ – Butterfly

+0

@vajrasar - определить" когда-либо " – Igor

ответ

1

jQuery(document).ajaxComplete является независимым event. Почему вы объединили его внутри click и снова записали jQuery.ajax? Отдельные проблемы, как показано ниже:

jQuery(document).ajaxComplete(function() { 
    token = true;//If you need this only in success then no need to put it here as this 
    //will get executed irrespective of ajax result 
}); 

jQuery('.add_to_wishlist').on('click', function() { 
    if(token == false) { 
      jQuery.ajax({ 
       url: wishajax.ajax_url, 
       data: { 
         action: 'vg_inject_wish', 
       }, 
       success: function(response) { 
         console.log('Entered Success!'); 
         jQuery('.wishlist-container').html(response); 
         console.log('After Success!'); 
         token = true; 
       } 
      }); 
    } 
}); 
0

может быть, это может помочь вам

function once(fn, context) { 
    var result; 

    return function() { 
     if(fn) { 
      result = fn.apply(context || this, arguments); 
      fn = null; 
     } 

     return result; 
    }; 
} 

// Usage 
var canOnlyFireOnce = once(function() { 
    console.log('Fired!'); 
}); 

canOnlyFireOnce(); // "Fired!" 
canOnlyFireOnce(); // nada 

взяты из blog of David Walsh.

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