2017-09-15 1 views
2

Ich muss AjaxStop Funktion verwenden, um ein Ajax zu benennen, um neues HTML-Element zu rendern, aber nachdem die Ajax-Funktion das Ajax wiederholt sich immer und immer wieder, ich muss nur diese Ajax einmal innerhalb der ausführen ajaxStop-Funktion. jQuery-Code:Ajax Funktion in AjaxStop Funktion

$(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; 
}); 
+0

Es gibt keine Bedingung für den AJAX. Es läuft jedes Mal, wenn eine Anfrage beendet wird. Mach ein Bool, wenn es gestoppt werden muss. Genau dort hast du eine Endlosschleife gemacht. – user5014677

Antwort

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; 
}); 

Flag es, wann immer es braucht Ihre Funktion nicht mehr anrufen. Genau dort habe ich gerade die Erfolgsmethode hinzugefügt. Aber wenn du es nur einmal tun musst, brauchst du vielleicht keinen ajaxStop?

0

Wie in der documentation angegeben, können Sie Ihren AJAX-Anruf mit global: false tun, um nicht ajaxStop Ereignis auslösen.

Aber Sie sollten in Betracht ziehen, Versprechungen zu verwenden, um den Moment zu erfassen, in dem alle Ihre vorherigen Anforderungen beendet sind.