我无法在$scope
请求的成功回复中设置$http.post
的值。帖子请求是使用submit()
从表单提交通过ng-submit="submit()"
函数发送的。
chatApp.controller('createController', ['$scope', '$http', '$location', function($scope, $http, $location) {
$scope.fullname;
$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.fullname = data.config.data.firstname + " " + data.config.data.lastname;
console.log($scope.fullname);
$location.path("/createsuccess");
}, function() {
console.log("Error");
})
}
console.log($scope.fullname);
}]);
第一个console.log($scope.fullname)
输出正确的数据。
第二个console.log($scope.fullname)
输出'未定义'。
我感谢每个花时间看这个的人。
答案 0 :(得分:0)
在then
的{{1}}上尝试更新以下内容:
$http.post
to(除非数据对象是显式data.config.data.firstname / WS不返回数据):
$scope.fullname = data.config.data.firstname + " " + data.config.data.lastname;
如果这不能解决问题,请尝试$scope.fullname = data.firstname + " " + data.lastname;
查看来自服务器的console.log(data);
方法响应。
答案 1 :(得分:0)
这是非常基本的。 A JAX请求是异步执行的异步请求。因此,当您使用$http
方法(使用AJAX将数据发布到服务器)提交表单时,将在服务器响应后执行成功回调。
因此,您不能期望在提交表单后执行上一个console
语句。
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");
}]);
当您createController
进行实例化时,您会首先看到输出1
,然后是5
。当您使用create()
方法提交表单时,您会看到输出2
- > 4
几秒后3
。
修改强>
要实际修复您评论的问题,可以使用$rootScope
,但不建议使用$rootScope
。因此,我建议您创建一个全局控制器并将其分配给body
标记,如
<body ng-controller="GlobalController">
在那里定义一个对象:
chatApp.controller("GlobalController", ["$scope", function($scope) {
$scope.globalData = {};
}]);
这将在整个应用程序中创建一个通用的Angular范围,以便您可以保持共同和通用数据。并且每个子控制器(在这种情况下都是createController
)将从此全局控制器继承数据。
现在,修改你的createController代码,如下所示:
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);
}]);
或者,您可以创建一个Angular服务/工厂来保存公共数据。