2015-09-26 38 views
4

我试图将params对象传递给$http.get()服务。我的PARAMS是这样的:

var params = { 
    one: value, 
    two: value 
} 

我试图将它们传递到我的功能,像这样:

$http.get('/someUrl', params) 
.success(function(data) { 
    // stuff 
}) 
.error(function(data) { 
    // error stuff 
}); 

这是正确的方式去这样做呢?

+0

他们是路径/查询参数? – Shikloshi

回答

11

$http第二个参数是一个配置对象(see documentation)。除其他特性,该配置对象接受params属性:

  • PARAMS - {Object.<string|Object>} - 地图将与paramSerializer被串行化和所附作为GET参数串或对象。

因此,你必须传递的参数作为这样

var config = { 
    params: { 
     one: value, 
     two: value 
    } 
} 

$http.get('/someUrl', config).then(...) 

假设值的参数是分别“1”和“2”,$http将发送GET请求到以下网址:

/someUrl?one=1&two=2 

作为一个侧面说明,尽量避免使用$httpsuccesserror功能。它们从1.4.4角度被弃用。改用方法then,取而代之的是成功和错误回调,或者只使用成功回调和catch

+0

这太棒了!谢谢你。 – realph

1

$ http documentation表明$ http.get方法的第二个参数是一个对象,您可以通过它传递“param”对象。

尝试是这样的:

$http.get('/someUrl', {params: params}) 
.success(function(data) { 
    // stuff 
}) 
.error(function(data) { 
    // error stuff 
}); 
3

服务/厂

对于实际通话使用一个工厂或服务,你可以注入到你需要它的控制器,这是一个例子出厂合格参数

.factory('Chats', function ($http, $rootScope, $stateParams) { 
    return { 
     all: function() { 
      return $http.get('http://ip_address_or_url:3000/chats', { params: { user_id: $rootScope.session } }) 
     } 
    }; 
}); 

控制器

在你续辊使用服务这样

.controller('ChatsCtrl', function ($scope, Chats) { 
    Chats.all().success(function (response) { 
     $scope.chats = response; 
    }) 
}) 
2

我已经在最近的时间遇到​​了类似的问题,我不得不一些额外的细节添加到请求(我用的接受了一些头回答):

$http.get(url, { 
    params: { 
     paramOne: valueOne, 
     paramTwo: valueTwo, 
     ... 
    }, 
    headers: { 
     'key': 'value' 
    }, 
    // responseType was required in my case as I was basically 
    // retrieving PDf document using this REST endpoint 
    // This is not required in your case, 
    // keeping it for somebody else's reference 
    responseType: 'arraybuffer' 
}).success(
    function(data, status, headers, config) { 
     // do some stuff here with data 
    }).error(function(data) { 
     // do some stuff here with data 
});