Dies ist sehr einfach. Eine Eine JAX-Anfrage ist eine asynchrone Anfrage, die asynchron ausgeführt wird. Wenn Sie also Ihr Formular mit der Methode $http
senden (die Daten mit AJAX auf den Server überträgt), wird der Erfolgsrückruf ausgeführt, nachdem der Server geantwortet hat.
Sie können also nicht erwarten, dass Ihre letzte Anweisung console
nach der Übermittlung Ihres Formulars ausgeführt wird.
chatApp.controller('createController', ['$scope', '$http', '$location', function($scope, $http, $location) {
console.log("1");
$scope.fullname;
$scope.create = function() {
console.log("2");
$http.post('ajax/createaccount.php', {
'email': $scope.email // your data
}).then(function(data) {
console.log("3");
}, function() {
console.log("Error");
})
console.log("4");
}
console.log("5");
}]);
Wenn Ihr createController
instanziiert wird, werden Sie die Ausgabe 1
und dann 5
zuerst sehen. Und wenn Sie Ihr Formular mit create()
Methode senden, dann sehen Sie die Ausgabe 2
->4
und nach ein paar Sekunden 3
.
bearbeiten
Um Ihr Problem tatsächlich zu beheben, die Sie kommentiert, Sie die $rootScope
aber mit $rootScope
wird nicht empfohlen, verwenden können. So empfehle ich Ihnen einen globalen Controller erstellen und zuweisen, um sie Ihren body
Tag wie
<body ng-controller="GlobalController">
Und definieren dort ein Objekt:
chatApp.controller("GlobalController", ["$scope", function($scope) {
$scope.globalData = {};
}]);
Dies wird einen gemeinsamen Winkel Umfang in Ihrer Anwendung erstellen, so dass Sie Halten Sie gemeinsame & generische Daten. Und jeder untergeordnete Controller (wie in diesem Fall createController
) erbt Daten von diesem globalen Controller.
jetzt Ihren createController Code wie folgt ändern:
chatApp.controller('createController', ['$scope', '$http', '$location', function ($scope, $http, $location) {
$scope.create = function() {
// console.log($scope.email, $scope.password, $scope.firstname, $scope.lastname);
$http.post('ajax/createaccount.php', {
'email': $scope.email,
'username': $scope.username,
'password': $scope.password,
'firstname': $scope.firstname,
'lastname': $scope.lastname
}).then(function (data) {
console.log("Success");
$scope.globalData.fullname = data.config.data.firstname + " " + data.config.data.lastname;
console.log($scope.fullname);
$location.path("/createsuccess");
}, function() {
console.log("Error");
})
};
console.log($scope.globalData.fullname);
}]);
Alternativ können Sie ein Angular Service/Werk schaffen können, die gemeinsamen Daten zu halten.
Die zweite bedeutet eine außerhalb der 'create' Funktion? –