AngularJS将数据传递给$ http.get请求

Sab*_*kar 572 javascript javascript-framework angularjs

我有一个执行http POST请求的函数.代码如下所示.这很好用.

 $http({
   url: user.update_path, 
   method: "POST",
   data: {user_id: user.id, draft: true}
 });
Run Code Online (Sandbox Code Playgroud)

我有另一个http GET函数,我想发送数据到该请求.但我没有这个选择.

 $http({
   url: user.details_path, 
   method: "GET",
   data: {user_id: user.id}
 });
Run Code Online (Sandbox Code Playgroud)

的语法http.get

get(url,config)

有人可以帮我弄这个吗?

fre*_*rik 937

HTTP GET请求不能包含要发布到服务器的数据.但是,您可以向请求添加查询字符串.

angular.http为它调用了一个选项params.

$http({
    url: user.details_path, 
    method: "GET",
    params: {user_id: user.id}
 });
Run Code Online (Sandbox Code Playgroud)

请参阅:http://docs.angularjs.org/api/ng.$http#gethttps://docs.angularjs.org/api/ng/service/$http#usage(显示params参数)

  • Angular还提供了`$ http.get(url.details_path,{params:{user_id:user.id}})`中的功能. (127认同)
  • 这将回报一个承诺 (17认同)
  • 保持HTTP动词之间的对象密钥一致会很好...拥有POST的数据和GET的参数是违反直觉的. (15认同)
  • @HubertPerron实际上它并不违反直觉,因为它们是不同的东西:DATA可以表示一个对象/模型,甚至嵌套,并成为POST标题的一部分... PARAMS代表你可以添加到GET url的内容,其中每个属性代表一个网址中的部分查询字符串.他们有不同的命名是很好的,因为它让你意识到你正在做一些不同的事情. (7认同)

Rob*_*Rob 515

可以直接传递params $http.get()以下工作正常

$http.get(user.details_path, {
    params: { user_id: user.id }
});
Run Code Online (Sandbox Code Playgroud)

  • @wdphd HTTP是固有的,它将被编码为查询字符串 (13认同)
  • 这有效,但是params对象正在转换为String。我如何保留原始对象? (2认同)
  • 如果您想将GET参数添加到给定的URL并且工作正常,这是正确的解决方案. (2认同)

Arp*_*wal 42

AngularJS v1.4.8开始,您可以使用 get(url, config) 如下:

var data = {
 user_id:user.id
};

var config = {
 params: data,
 headers : {'Accept' : 'application/json'}
};

$http.get(user.details_path, config).then(function(response) {
   // process response here..
 }, function(response) {
});
Run Code Online (Sandbox Code Playgroud)


Sub*_*axe 33

有兴趣在GET请求中发送params和header的人的解决方案

$http.get('https://www.your-website.com/api/users.json', {
        params:  {page: 1, limit: 100, sort: 'name', direction: 'desc'},
        headers: {'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}
    }
)
.then(function(response) {
    // Request completed successfully
}, function(x) {
    // Request error
});
Run Code Online (Sandbox Code Playgroud)

完整的服务示例将如下所示

var mainApp = angular.module("mainApp", []);

mainApp.service('UserService', function($http, $q){

   this.getUsers = function(page = 1, limit = 100, sort = 'id', direction = 'desc') {

        var dfrd = $q.defer();
        $http.get('https://www.your-website.com/api/users.json', 
            {
                params:{page: page, limit: limit, sort: sort, direction: direction},
                headers: {Authorization: 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}
            }
        )
        .then(function(response) {
            if ( response.data.success == true ) { 

            } else {

            }
        }, function(x) {

            dfrd.reject(true);
        });
        return dfrd.promise;
   }

});
Run Code Online (Sandbox Code Playgroud)