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

IT技术 javascript angularjs javascript-framework
2021-01-25 16:44:27

我有一个执行 http POST 请求的函数。代码在下面指定。这工作正常。

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

我有另一个用于 http GET 的函数,我想将数据发送到该请求。但是我在 get 中没有那个选项。

 $http({
   url: user.details_path, 
   method: "GET",
   data: {user_id: user.id}
 });

的语法http.get

获取(网址,配置)

6个回答

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

angular.http 为其提供了一个名为params.

$http({
    url: user.details_path, 
    method: "GET",
    params: {user_id: user.id}
 });

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

@HubertPerron 实际上这并不违反直觉,因为它们是不同的东西:DATA 可以代表一个对象/模型,甚至是嵌套的,并成为 POST 标头的一部分...... PARAMS 代表您可以添加到 GET url 的内容,其中每个属性代表一个url 中查询字符串的一部分。他们有不同的命名是好的,因为它让你意识到你正在做不同的事情。
2021-03-20 16:44:27
保持 HTTP 动词之间的对象键一致会很好……拥有用于 POST 的数据和用于 GET 的参数是违反直觉的。
2021-03-21 16:44:27
带有Promise的代码:$http({method: 'GET', url: '/someUrl'})。success(function(data, status, headers, config) { // 当响应可用时,这个回调将被异步调用 })。error(function(data, status, headers, config) { // 如果发生错误则异步调用 // 或者服务器返回带有错误状态的响应。 });
2021-04-04 16:44:27
Angular 还提供了$http.get(url.details_path, {params: {user_id: user.id}}).
2021-04-04 16:44:27
这将返回一个Promise
2021-04-07 16:44:27

可以将参数直接传递给$http.get()以下工作正常

$http.get(user.details_path, {
    params: { user_id: user.id }
});
如果您想将 GET 参数添加到给定的 URL 并且工作正常,这是正确的解决方案。
2021-03-18 16:44:27
@胡安,stackoverflow.com/ questions/417142/...
2021-03-19 16:44:27
这有效,但 params 对象正在转换为 String。我如何保留原始对象?
2021-03-28 16:44:27
@wdphd 它是 HTTP 固有的,它将被编码为查询字符串
2021-04-02 16:44:27
@Uli Köhler:是的,错过了这个。我在考虑 UI 路由器的思路,您可以在其中指定 params 数据类型。在后端使用一个简单的 parseInt 修复了这个问题。
2021-04-06 16:44:27

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) {
});
@Arpit Aggarwal 用 golang 网络服务器和 vue.js 看看我的类似问题,你会这么友好吗?stackoverflow.com/questions/61520048/...
2021-03-11 16:44:27
如果 AngularJS 文档能提供这个简单的例子就好了!
2021-03-14 16:44:27
@naXa GET 应该只是按照惯例是 url 参数,因此许多框架不允许它强制执行最佳实践,即使从技术上讲它可以工作并且可能有意义。
2021-03-15 16:44:27
但是这些数据仍然不在请求正文中。
2021-03-30 16:44:27

对在 GET 请求中发送 params 和 headers 感兴趣的人的解决方案

$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
});

完整的服务示例如下所示

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;
   }

});
如何在控制器中使用响应数据?谢谢。
2021-03-19 16:44:27

您甚至可以简单地将参数添加到 url 的末尾:

$http.get('path/to/script.php?param=hello').success(function(data) {
    alert(data);
});

与 script.php 配对:

<? var_dump($_GET); ?>

导致以下 javascript 警报:

array(1) {  
    ["param"]=>  
    string(4) "hello"
}
这也有效,但问题是当您有多个参数时,将它们添加到 url 的末尾会变得很痛苦,而且如果您更改变量名称,您也必须在 url 中更改它。
2021-03-11 16:44:27
我知道。这更像是一个演示,表明您甚至可以按照常规方式进行操作,我不一定推荐它。(其中“常规方式”是指您多年来使用 php 的方式)
2021-03-18 16:44:27
$http 做任何转义吗?
2021-04-05 16:44:27