ajaxStop函数内部的Ajax函数

时间:2017-09-15 07:53:34

标签: javascript jquery ajax

我需要使用ajaxStop函数调用ajax来呈现新的html元素,但是在ajax函数finsihed之后,ajax一遍又一遍地重复,我只需要在ajaxStop函数内运行一次ajax。 jQuery代码:

$(document).ajaxStop(function () {
          $.ajax({
              type: 'post',
              url: url.build('test/payment/getmethod'),
              cache: false,
              showLoader: true,
              method: "POST",
              success: function(data) {
                if(data!='') {
                  var htm ='';
                  htm += '<div class="payment-method-billing-address">';
                  $.each(data , function(i, method) {
                    htm +=  '<input type="radio" class="required" name="snap-method"  value='+method.value+'">'+method.label+'<br>';
                  });
                  htm +=  '</div>';
                  $( htm ).insertBefore( ".checkout-agreements-block" );
                }
                return false;
              }
          })
          return false;
 });

2 个答案:

答案 0 :(得分:2)

var callAjax= true;

$(document).ajaxStop(function () {
          if (callAjax){
            $.ajax({
              type: 'post',
              url: url.build('test/payment/getmethod'),
              cache: false,
              showLoader: true,
              method: "POST",
              success: function(data) {
                if(data!='') {
                  var htm ='';
                  htm += '<div class="payment-method-billing-address">';
                  $.each(data , function(i, method) {
                    htm +=  '<input type="radio" class="required" name="snap-method"  value='+method.value+'">'+method.label+'<br>';
                  });
                  htm +=  '</div>';
                  $( htm ).insertBefore( ".checkout-agreements-block" );
                }
                callAjax = false;
                return false;
              }
            });
          }
          return false;
 });

在需要停止调用您的函数时标记它。就在那里,我刚刚添加了成功方法。但是如果你只需要做一次,你可能不需要ajaxStop?

答案 1 :(得分:0)

documentation所述,您可以与global: false进行AJAX通话,以便不会触发ajaxStop事件。

$(document).ajaxStop(function () {
      $.ajax({
          type: 'post',
          url: url.build('test/payment/getmethod'),
          cache: false,
          showLoader: true,
          global: false,
          method: "POST",
          success: function(data) {
            if(data!='') {
              var htm ='';
              htm += '<div class="payment-method-billing-address">';
              $.each(data , function(i, method) {
                htm +=  '<input type="radio" class="required" name="snap-method"  value='+method.value+'">'+method.label+'<br>';
              });
              htm +=  '</div>';
              $( htm ).insertBefore( ".checkout-agreements-block" );
            }
            return false;
          }
      })
      return false;
 });

但你应该考虑使用promises来抓住你以前的所有请求都已完成。