Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何管理AngularJS http请求调用_Javascript_Jquery_Angularjs_Reactjs_Https - Fatal编程技术网

Javascript 如何管理AngularJS http请求调用

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

我有一段发送双重HTTP请求的代码。我想首先发出一个身份验证请求,如果为true,则执行下一条语句(只返回一个$HTTP承诺)。如何在angularJS中执行此操作。到目前为止,它返回未定义

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。我有另一个通用方法可以做到这一点