2016-07-22 5 views
0

Hey Leute, ich weiß, dass dieses Problem viel geschrieben hat, aber nichts hilft mir nicht, deshalb frage ich diese Frage.Frage ist, ich habe ein Problem mit dem Senden einer synchrone Anfrage an php. Hier ist meine Model-Funktion, die Anfrage sendet.

State.pushData = function() { 
    $http({ 
    method: 'POST', 

    url: 'pushData.php?action=pushdata', 
    data: {'status': 'push', 'email' : State.campemail}, 
    headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
    }).success(function(response){ 
     if(response.error){ 
      console.log(response.error); 
      return; 
     } 
     State.getCartData(); 
     State.selectedItems = [], 
    }); 
} 

Diese PushData-Funktion senden eine Post-Anfrage an definierte URL. und eine Antwort holen. Der geschriebene Code soll die Funktion "State.getCartData()" ausführen, sobald die Anfrage erfolgreich gesendet wurde. Aber das funktioniert nicht auf diese Weise. beide Anfragen werden sofort ausgeführt. Ich hatte versucht $ http mit .post und dann Methoden, aber die gleichen Ergebnisse. wie dies

State.pushData = function() { 
    $http.post('pushData.php?action=pushdata', 
    {'status': 'push', 'email' : State.campemail} 
    ).then(function(response){ 
     if(response.error){ 
      console.log(response.error); 
      return; 
     } 
     State.getCartData(); 
     State.selectedItems = [], 
    }); 
} 

Ich mag Anfrage asynchron senden, dass einmal abgeschlossen pushQuote Anfrage danach getCartData() Funktion ausführt. Bitte teile deine Erfahrungen dazu mit. Danke im Voraus.

+1

Soweit ich das beurteilen kann, ist Ihr Problem nicht in dem von Ihnen geposteten Snippet enthalten. Es gibt keine Möglichkeit, dass 'State.getCartData();' ausgelöst werden kann, bevor das Versprechen gelöst wird. Sie sollten herausfinden, wo 'State.getCartData();' ausgelöst wird. Ein einfacher Weg, dies zu tun, ist dieser Ausschnitt: 'console.info ((new Error()). Stack);' Dies wird ein Fehler-Stack protokollieren, ohne tatsächlich einen zu werfen, aber es zeigt Ihnen die letzten 10 Schritte Ihrer Anwendung zur Ausführung von 'getCartData'. Hoffe das hilft. – Pjetr

+1

Hier ist die Controller-Funktion, die diese Modellfunktion aufruft. scope.pushIt = function() { console.log ("Drücken von Daten zum Server"); State.pushData(); } Hier ist nichts als nur ein Aufruf von PushData(). –

+0

Könntest du 'console.info ((new Error()). Stack);' als erstes in 'getCartData' ausführen? Und bearbeiten Sie die Stack-Trace in Ihrem Post. – Pjetr

Antwort

0

habe nach einigen Brainstorming eine Antwort auf meine Frage bekommen. Ich gebe $ http in meinem Modell zurück und rufe .then() für die zurückgegebene Antwort auf. Es hat funktioniert, wie ich Anfrage senden möchte, sobald zuerst erfolgreich abgeschlossen wurde. Hier ist meine Modellfunktion

State.pushData = function() { 
    return $http.post('pushData.php?action=pushdata', 
    {'status': 'push', 'email' : State.campemail} 
); 
} 

in obiger Funktion Ich sende nur Post-Anfrage an den Server und seine Antwort auf Controller-Funktion zurück. welches direkt nach der Rückkehr vom Modell ausgeführt wird. Hier ist meine Controller-Funktion.

scope.pushIt = function() { 
    var responseObj = State.pushData(); 
    responseObj.then(
    function() { //successs call back 
     /*Business logic*/ 
     State.getCartData(); 
     State.selectedItems = [] 
    }, 
    function() { //Error call back 
     /*Business logic*/ 
    } 
); 
} 

Schönheit dieses Ansatzes ist, können Sie dann Methode so viele wie Sie wollen. sie werden alle nacheinander in der Kette ausgeführt.

scope.pushIt = function() { 
var responseObj = State.pushData(); 
    responseObj.then(
    function() { //successs call back 
    /*Business logic*/ 
    }, 
    function() { //Error call back 
    /*Business logic*/ 
    } 
).then(
    function() { //successs call back 
    /*Business logic*/ 
    }, 
    function() { //Error call back 
    /*Business logic*/ 
    } 
); 
} 
Verwandte Themen