2016-04-25 17 views
0

Von meinem eckigen Controller mache ich einen Funktionsaufruf, um $ http.post() Anfrage zu tun.

$scope.formSuccess = false; 

$scope.submit = function(serviceName) { 
    submitRequest(serviceName); 
    if($scope.formSuccess) { 
     // do something 
    } 
}; 

var submitRequest = function(serviceName) { 
    $http.post(serviceName, data, { headers: { 'Content-type': 'application/json' } 
    }).then(successFunction, errorFunction); 
}; 

var successFunction = function(response) { 
    $scope.formSuccess =true; 
}; 

der Code unter dem SubmitRequest() ausgeführt wird als die erste successFunction(), so dass der Code in Block ausgeführt wird, wenn nicht. wie kann ich das machen. Ich möchte nicht verschieben, wenn Block zu successFunction.

+0

Das wird nicht funktionieren. Ihr Dienst wird aufgerufen, dann wird der Befehl if formSuccess ausgeführt und gibt immer false zurück, da Ihre http-Anfrage niemals vor dieser if-Anweisung erfolgt. Bitte lesen Sie die Dokumentation in Bezug auf http https://docs.angularjs.org/api/ng/service/$http Auch ein weiterer Link mit besseren Beispielen https://thinkster.io/http – Ronnie

Antwort

2

Das Problem ist, diese Zeile if($scope.formSuccess) { bevor ausgeführt wird http Anfrage durchgeführt wird, damit die Aussage innerhalb des if wird nie ausgeführt.

Die sauberste Lösung wäre es, Funktionen einzuführen, auf $http.post Erfolg und Misserfolg ausführen

$scope.formSuccess = false; 
 

 
$scope.submit = function(serviceName) { 
 
    submitRequest(serviceName) 
 
    .then(onPostSuccess) 
 
    .catch(onPostFail); 
 
}; 
 

 
var submitRequest = function(serviceName) { 
 
    return $http.post(serviceName, data, { headers: { 'Content-type': 'application/json' } 
 
    }); 
 
}; 
 

 
var onPostSuccess = function(response) { 
 
    $scope.formSuccess = true; 
 
    //do your stuff here 
 
    
 
}; 
 

 
var onPostFail = function(response){ 
 
    $scope.formSuccess = false; 
 
    //show form failed 
 
}

1

Weil in senden Funktion, wenn ($ scope.formSuccess) nicht auf HTTP-Antwort wartet. So ist es immer falsch ist, müssen Sie es Funktion innerhalb Versprechen setzen

var successFunction = function(response) { 
    $scope.formSuccess =true; 
    // do what you want in here 

}; 
Verwandte Themen