2016-11-23 2 views
0

Das ist sehr schlecht CodeWiederverwendbare Ajax-Aufruf in X-mal mit der gleichen Logik

Ich brauche eine ähnliche Logik zu tun, aber ohne setInterval.

Es ist Grundlage 5 modalen Dialog

<span class="spanButton registration" data-reveal-id="addExternalRegistration">Add external registration</span> 

Diese Taste, die leer modal offenbaren

<div id="addExternalRegistration" class="reveal-modal" data-reveal aria-hidden="true"> 

und mit jQuery bin ich Dialog mit Formular ausfüllen.

In Ajax Erfolg ändere ich Inhalt im Dialogfeld, wenn Formular Fehler hat. Und Geschichte endet hier. Aber ich muss x submits abdecken, bevor das Formular gültig ist.

setInterval tötet Speicher Ich weiß, dass dies nur ein Beispiel ist, um zu zeigen, was ich will.

Antwort ist neues Formular mit Fehlern und sollte nicht gesendet werden, es ist notwendig, Ajax-Anfrage und all das in x-Kreisen zu senden.

$('.registration').click(function() { 
      $('#addExternalRegistration').load("/dashboard/add-external-registration/{{ confName }}"); 

      setInterval(function() { 
       $('form[name="dashboard_conference_registration_form"]').on('submit', function (e) { 
        e.preventDefault(); 

        $.ajax({ 
         url: '/dashboard/add-external-registration/{{ confName }}', 
         method: 'POST', 
         data: $(this).serialize(), 
         success: function(response) { 
          $('#addExternalRegistration').html(response); 
         } 
        }); 
       }); 
      }, 3000); 
     }); 

Antwort

0

Ich mache ein paar alte Tricks.

rekursive Aufrufe

Dies ist Funktion, die Ajax-Request unbegrenzte Anzahl von Zeit

(wegen Leck des Speichers in der Theorie, leider) sendet.

var ajax = function() { 
      $('form[name="dashboard_conference_registration_form"]').on('submit', function (e) { 
       e.preventDefault(); 

       $.ajax({ 
        url: '/dashboard/add-external-registration/{{ confName }}', 
        method: 'POST', 
        data: $(this).serialize(), 
        success: function(response) { 
         $('#addExternalRegistration').html(function() { 
          return response; 
         }); 
         setTimeout(ajax(), 2000); 

        } 
       }); 
      }); 
     }; 

Dann rufe ich rekursive Funktion, die Rekursion auf einreichen abfeuert.

 $('.registration').click(function() { 
      $('#addExternalRegistration').load("/dashboard/add-external-registration/{{ confName }}", 
        // Wait until form is loaded at modal window 
        // And then do the logic 
        function() { 
         $('form[name="dashboard_conference_registration_form"]').on('submit', function (e) { 
          e.preventDefault(); 

          $.ajax({ 
           url: '/dashboard/add-external-registration/{{ confName }}', 
           method: 'POST', 
           data: $(this).serialize(), 
           success: function(response) { 
            $('#addExternalRegistration').html(function() { 
             return response; 
            }); 
            setTimeout(ajax(), 2000); 
           } 
          }); 
         }); 
        } 
      ); 

     }); 
Verwandte Themen