Angularjs 我试图将数据从自定义angular JS服务返回到控制器,但它总是返回";{};
我已经编写了一个自定义angular服务,它在对WCF服务进行post调用后返回会话id。我可以在chrome的网络选项卡上看到调用返回了会话id,但是当我试图通过$http.post将其返回给调用方时,它返回了“{}”对象 我已经在stackoverflow等中跟踪了与此问题相关的所有问题/答案,但没有结果。我知道在处理电话回信时出现了问题,但我不知道,也无法确定问题出在哪里 这是定制服务Angularjs 我试图将数据从自定义angular JS服务返回到控制器,但它总是返回";{};,angularjs,angularjs-service,angularjs-http,Angularjs,Angularjs Service,Angularjs Http,我已经编写了一个自定义angular服务,它在对WCF服务进行post调用后返回会话id。我可以在chrome的网络选项卡上看到调用返回了会话id,但是当我试图通过$http.post将其返回给调用方时,它返回了“{}”对象 我已经在stackoverflow等中跟踪了与此问题相关的所有问题/答案,但没有结果。我知道在处理电话回信时出现了问题,但我不知道,也无法确定问题出在哪里 这是定制服务 angApp.service('RPCService', function($http) {
angApp.service('RPCService', function($http) {
var url_login = 'http://xxxxxxx';
this.Login = function(request) {
return $http.post(url_login, request)
.then(function (result) {
return result.data;
},
function (data, status) {
console.log(data + status);
});
};
我是来电者
angApp.controller('exportController', ['$scope', 'RPCService', function ($scope, RPCService) {
$scope.export = {};
$scope.exportLogin = function(){
var req = {
"SiteId" : $scope.export.xxx,
"UserName" : $scope.export.xxx,
"Password" : $scope.export.xxx
};
$scope.export.sessionId = RPCService.Login(req);
};
我希望输出为“SessionId”:“xxxxxxxx”,但我得到的是“{}”
$http.post
返回一个承诺,这就是您的服务方法返回的承诺
改变
$scope.export.sessionId = RPCService.Login(req);
到
$http.post
返回一个承诺,这就是您的服务方法返回的承诺
改变
$scope.export.sessionId = RPCService.Login(req);
到
错误处理程序的签名错误: 错误的
return $http.post(url_login, request)
.then(function (result) {
return result.data;
},
function (data, status) {
console.log(data + status);
});
更好
返回$http.post(url\u登录,请求)
.然后(函数(结果){
返回结果数据;
},
功能(响应){
var数据=响应数据;
var status=response.status;
console.log(数据+状态);
//重要重发错误
投掷反应;
});
在拒绝处理程序中重新抛出错误很重要。否则,被拒绝的承诺将转换为值为
未定义的已履行承诺错误处理程序的签名错误:
错误的
return $http.post(url_login, request)
.then(function (result) {
return result.data;
},
function (data, status) {
console.log(data + status);
});
更好
返回$http.post(url\u登录,请求)
.然后(函数(结果){
返回结果数据;
},
功能(响应){
var数据=响应数据;
var status=response.status;
console.log(数据+状态);
//重要重发错误
投掷反应;
});
在拒绝处理程序中重新抛出错误很重要。否则,被拒绝的承诺将转换为已履行的承诺,其值为undefined添加用于错误回调的单个参数,然后使用承诺访问器with.then关键字解决调用方的问题。下面是代码
this.Login = function(request) {
return $http.post(url_login, request)
.then(function (result) {
return result.data;
},
function (response) {
var data = response.data;
var status = response.status;
console.log(data + " | " + status);
throw response;
});
};
在控制器上
RPCService.Login(req).then(function(data){
$scope.export.sessionId = data.SessionId;
});
为错误回调添加单个参数,然后在调用者上使用带有.then关键字的promise访问器修复了该问题。下面是代码
this.Login = function(request) {
return $http.post(url_login, request)
.then(function (result) {
return result.data;
},
function (response) {
var data = response.data;
var status = response.status;
console.log(data + " | " + status);
throw response;
});
};
在控制器上
RPCService.Login(req).then(function(data){
$scope.export.sessionId = data.SessionId;
});
我已经试过了,错误是函数没有定义“then”函数。我不在我的系统前面,但会分享实际的错误。谢谢你的输入。我已经尝试过了,错误是函数没有定义“then”函数。我不在我的系统前面,但会分享实际的错误。谢谢你的输入。不,没有工作。它仍然将输出显示为“{}”。在我添加了带有一个参数的错误响应回调函数并使用带有.then构造的登录调用来读取承诺之后,它就工作了。谢谢georgeawg和@charlietfl的支持。没有。它仍然将输出显示为“{}”。在我添加了带有一个参数的错误响应回调函数并使用带有.then构造的登录调用来读取承诺之后,它就工作了。感谢georgeawg和@charlietfl的支持。