2010-11-18 4 views
1

Hallo Ich arbeite mit einer Ajax Post-Funktion, wo ich Daten senden und mein Rückruf von PHP gibt einige Daten zurück. Auf der Grundlage der zurückgegebenen Daten treffe ich die Entscheidung, entweder vorwärts zu gehen oder dem Benutzer zu erlauben, auf der Seite zu bleiben und Änderungen vorzunehmen.Stoppen Sie ein Formular laden auf der Grundlage der Rückgabedaten von einem Ajax Callback

 if (validateStep(step)) 
     { 
     if(step==1) 
     { 
      var data = document.getElementById('hiddenContact').value; 
      $.post('/app/controller/action', {'data':data}, function(returndata){if(returndata.match('not Unique'))alert('Contact source already exists'); else if(returndata.match('not posted')){alert("Not posted to the database");return false;}}); 
     } 
     step = step + 1; 
     form[0].action = '/app/controller/index/step:'+step; 
     document.getElementById('step').value = step; 
     form[0].submit(); 
     } 

Hier Ich versuche, die Anwendung geht voran zu stoppen, wenn die Rückdaten abgestimmt auf „nicht geschrieben,“ und ich eine Warnung bin zu werfen und dann eine Rückkehr falsch um den Vorgang zu stoppen. Ich kann die Anwendung jedoch nicht vom nächsten Schritt abhalten. Obwohl es falsch zurückgegeben wird, geht der Vorgang weiter zum nächsten Schritt, aber wenn ich die letzten 4 Zeilen kommentiere, die den Schritt erhöhen, die Aktion festlegen und abschicken, bleibt sie auf der Seite und die Warnung wird ausgelöst.

Weiß jemand, was ich tun soll, um meinen Prozess von Vorlage zu stoppen?

Antwort

1

AJAX-Aufrufe sind asynchron. Das "Falsch", das Sie zurückgeben, bezieht sich auf den Erfolgs-Callback, nicht auf den Handler, den Sie dort gezeigt haben. So werden die letzten vier Schritte immer ausgeführt, bevor der AJAX-Aufruf überhaupt den Server erreicht. Sie können dieses Problem beheben, indem Ajax-Antwort Rückruf Ändern damit umgehen, etwa so:

if (validateStep(step)) 
{ 
    var next_step = function() { 
     step = step + 1; 
     form[0].action = '/app/controller/index/step:'+step; 
     document.getElementById('step').value = step; 
     form[0].submit(); 
    } 

    if(step==1) 
    { 
     var data = document.getElementById('hiddenContact').value; 
     $.post('/app/controller/action', { 'data':data }, function(returndata) { 
      if (returndata.match('not Unique')) alert('Contact source already exists'); 
      else if (returndata.match('not posted')) alert("Not posted to the database"); 
      else next_step(); 
     }); 
    } 
    else next_step(); 
} 
+0

Hallo Lee, Ich versuche, den Prozess für den Fall ‚nicht gebucht‘ zu stoppen. Wenn ich also die next_step-Funktion aufrufen würde, würde sie den Einreichungsteil trotzdem ausführen, oder? – macha

+0

@macha, 'next_step()' führt den Übermittlungsprozess aus, aber beachte, dass es in dem Code, den ich gepostet habe, in der 'else'-Klausel liegt, wenn die' if'-Anweisung. Es wird also nur gepostet, wenn die ersten beiden Bedingungen übereinstimmen. Willst du es auch nicht posten, wenn der Reutrn "nicht Unique" ist? Der Code, den ich gepostet habe, nahm an, dass unter diesen Fehlerbedingungen die Formularübermittlung verhindert werden würde. –

+0

Sie sind der Mann Lee !! Danke vielmals! – macha

0

Ihr Prozess mit dem nächsten Schritt weiter außerhalb Ihrer IF Anweisung und wird immer ausgeführt.

können Sie dies nicht tun:

if (validateStep(step)) 
    { 
     if(step==1) 
     { 
      var data = document.getElementById('hiddenContact').value; 
      $.post('/app/controller/action', {'data':data}, function(returndata){ 
       if(returndata.match('not Unique')) { 
        alert('Contact source already exists'); 

        step = step + 1; 
        form[0].action = '/app/controller/index/step:'+step; 
        document.getElementById('step').value = step; 
        form[0].submit(); 

       } else if (returndata.match('not posted')){ 
        alert("Not posted to the database"); 
        return false; 
       } 
      }); 
     } 
    } 
+0

Dies setzt voraus, dass Sie nur false (das nicht mehr benötigt wird) zurückgeben, wenn Sie nicht fortfahren wollten. Also 'Not Unique' geht weiter, wo 'nicht gepostet' nicht ist. –

Verwandte Themen