gpt4 book ai didi

angularjs - 从发送 http post 请求的 submit() 更改 $scope 变量

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:26:26 24 4
gpt4 key购买 nike

我无法在 $http.post 请求的成功响应中设置 $scope 的值。发布请求是通过使用 ng-submit="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) 输出“undefined”。

我感谢所有花时间看这篇文章的人。

最佳答案

这是非常基础的。 AJAX 请求是异步执行的异步请求。因此,当您使用 $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。所以我建议您创建一个全局 Controller 并将其分配给您的 body 标签,例如

<body ng-controller="GlobalController">

并在那里定义一个对象:

chatApp.controller("GlobalController", ["$scope", function($scope) {

$scope.globalData = {};
}]);

这将在整个应用程序中创建一个通用的 Angular 范围,以便您可以保存通用和通用数据。每个子 Controller (如本例中的 createController)将从该全局 Controller 继承数据。

现在,像这样修改您的 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 服务/工厂来保存公共(public)数据。

关于angularjs - 从发送 http post 请求的 submit() 更改 $scope 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38652480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com