gpt4 book ai didi

javascript - $http promise 中的成功回调没有发生

转载 作者:行者123 更新时间:2023-11-28 00:31:00 25 4
gpt4 key购买 nike

我正在做一个使用 RESTful API 的 Angular 应用程序。我以这种方式处理用户身份验证:

// in services.js

app.factory('authService', ['$http', '$q', 'localStorageService',
function ($http, $q, localStorageService) {

var login = function (loginData) {

var data = "grant_type=something&username=" + loginData.userName + "&password=" + loginData.password;
var deferred = $q.defer();

$http.post(serviceBase + 'token', data).
success(function (response) {
localStorageService.set('authorizationData', { token: response.access_token });
localStorageService.set('personaData', { username: response.username });

deferred.resolve(response);
}).
error(function(err, status) {
deferred.reject(err);
});

return deferred.promise;

};

和 Controller

// controller.js

app.controller('LoginCtrl', ['$scope', '$state', 'authService',
function ($scope, $state, authService) {
$scope.loginData = {
userName: '',
password: ''
};

$scope.alert = {type: '',msg: ''};

$scope.login = function () {
authService.login($scope.loginData).
then(function (response) {
$state.go('index'); // when the service verify that the auth data is correct, the controller redirects to the principal state
}, function (err) {
$scope.alert = {
type: 'danger',
msg: 'non'
};
});
};
}
]);

问题是,当用户发送正确的身份验证信息(即用户名和密码)时,当响应为 200 OK 时,服务不会执行 .success 回调。是的,只有当响应不是 200 OK 时才会出现这种行为。

资源的确切响应是:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 851
Content-Type: application/json;charset=UTF-8
Expires: -1
Server: Microsoft-IIS/8.5
X-Powered-By: ASP.NET
Date: Wed, 11 Mar 2015 16:20:12 GMT

{"access_token":"...","token_type":"...","expires_in":"...","username":"...","role":"...","display_name":"..."}

这里发生了什么?我该如何解决这个问题?谢谢。

最佳答案

您不需要创建新的 promise ,您只需从 $http 调用返回 promise - 我认为您对 localStorageService 的调用中发生了异常,但它正在丢失,并且您的 promise 永远不会得到解决。您可以将 authService 更改为以下内容,希望您会在 localStorageService 中看到错误:

app.factory('authService', ['$http', '$q', 'localStorageService', 
function ($http, $q, localStorageService) {

var login = function (loginData) {

var data = "grant_type=something&username=" + loginData.userName + "&password=" + loginData.password;

return $http.post(serviceBase + 'token', data).
success(function (response) {
localStorageService.set('authorizationData', { token: response.access_token });
localStorageService.set('personaData', { username: response.username });

return response;
});
};

关于javascript - $http promise 中的成功回调没有发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992650/

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