Javascript 如何管理AngularJS http请求调用
我有一段发送双重HTTP请求的代码。我想首先发出一个身份验证请求,如果为true,则执行下一条语句(只返回一个$HTTP承诺)。如何在angularJS中执行此操作。到目前为止,它返回未定义Javascript 如何管理AngularJS http请求调用,javascript,jquery,angularjs,reactjs,https,Javascript,Jquery,Angularjs,Reactjs,Https,我有一段发送双重HTTP请求的代码。我想首先发出一个身份验证请求,如果为true,则执行下一条语句(只返回一个$HTTP承诺)。如何在angularJS中执行此操作。到目前为止,它返回未定义 dmdb._login_request = function(credentials, conf) { var p = { '_method': 'POST', 'data[User][username]': credentials.login, 'd
dmdb._login_request = function(credentials, conf) {
var p = {
'_method': 'POST',
'data[User][username]': credentials.login,
'data[User][password]': credentials.password
};
conf.headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
};
var userData = {
'username': 'mbah',
'password': 'abc@123',
'applicationid': '1'
};
$http.post('myapp.com/authenticate/', userData, con).success(function(data) {
if (data.success) {
return $http.post(this.url + 'users/login', $.param(p), conf);
}
return $q.when('failed');
})
};
使用承诺链依次调用请求
function firstReq(userData, conf) {
return $http({
method: 'POST',
url: 'myapp.com/authenticate/',
headers: conf.headers,
data: userData
})
}
function secondReq(p, conf) {
return $http({
method: 'POST',
url: this.url + 'users/login',
headers: conf.headers,
data: $.param(p)
})
}
$scope.processform = function() {
var userData = {
'username': 'mbah',
'password': 'abc@123',
'applicationid': '1'
};
var p = {
'_method': 'POST',
'data[User][username]': credentials.login,
'data[User][password]': credentials.password
};
conf.headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
};
firstReq(userData, conf)
.then(function(response) {
console.log(response.data);
return secondReq(p, conf);
})
.then(function(response) {
console.log(response.data);
})
}
我不太明白你的问题是什么但是, 似乎您正试图从承诺的函数返回某些内容 我建议您编写以下代码:
var userData={
'username':'mbah',
'password':'abc@123',
'applicationid':'1'
};
var deferred = $q.defer();
$http.post('myapp.com/authenticate/',userData,con).success(function(data){
if(data.success){
$http.post(this.url+'users/login',$.param(p),conf).success(function(data2){
deferred.resolve(data2);
})
}
// I dont understand what this is for
//turn $q.when('failed');
})
return deferred.promise;
};
这样,您的函数将返回一个可以用于
你的目的
如果对你没有帮助,请详细说明
my_obj._login_request = function (credentials,conf) {
var url_=this.url;
var p = {
'_method': 'POST',
'data[User][username]': credentials.login,
'data[User][password]': credentials.password
};
conf.headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'};
var userData={
'username':'mbah',
'password':'abc@123',
'applicationid':'1'
};
var deferred = $q.defer();
$http.post('auth/path/UserLogin/Login',userData).success(function(data){
console.log(data);
if(!angular.isDefined(data.status)){
deferred.resolve($http.post(url_+'/users/login',$.param(p),conf));
}
else{
deferred.reject();
}
})
return deferred.promise;
};
这是我的最终代码,它按预期工作。感谢大家的帮助请复制并粘贴您的代码,而不是提供image@Houseman就这么做了。如果您有任何建议或提示,我们将不胜感激。谢谢您的帮助。但是,我想返回数据的$http.post(this.url+'users/login',$.param(p),conf)intead。我有另一个通用方法可以做到这一点