$ http获取参数不起作用


93

有谁知道为什么这不起作用?

$http
    .get('accept.php', {
        source: link,
        category_id: category
    })
    .success(function (data, status) {
        $scope.info_show = data
    });

这确实有效:

$http
    .get('accept.php?source=' + link + '&category_id=' + category)
    .success(function (data, status) {
        $scope.info_show = data
    });

Answers:


191

get调用中的第二个参数是一个配置对象。您想要这样的东西:

$http
    .get('accept.php', {
        params: {
            source: link,
            category_id: category
        }
     })
     .success(function (data,status) {
          $scope.info_show = data
     });

有关更多详细信息,请参见http://docs.angularjs.org/api/ng.$http的“ 参数”部分。


请注意,params如上使用还可解决GET请求不使用的问题data。AngularJS不会像jQuery那样自行解决。(我认为这不是一件好事或坏事,只是有所不同,可能会使人们绊倒)。
DanielM

我在params对象内的键值属性未定义。服务中应该不同吗?
Winnemucca 2015年

2
同样,当params对象为空,或者其所有属性均为null或时undefined,则不会向查询字符串添加任何内容。
nfang

3

$http.getdocs开始,第二个参数是一个配置对象:

get(url, [config]);

执行GET请求的快捷方式。

您可以将代码更改为:

$http.get('accept.php', {
    params: {
        source: link, 
        category_id: category
    }
});

要么:

$http({
    url: 'accept.php', 
    method: 'GET',
    params: { 
        source: link, 
        category_id: category
    }
});

作为一个侧面说明,因为角1.6.success 不应再使用,使用.then替代:

$http.get('/url', config).then(successCallback, errorCallback);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.