如何使用 AngularJS 中的一些数据进行 $http GET?

Posted

技术标签:

【中文标题】如何使用 AngularJS 中的一些数据进行 $http GET?【英文标题】:How to do a $http GET with some data in AngularJS? 【发布时间】:2015-11-18 10:04:28 【问题描述】:

我想向我的后端发出 Get 请求,但我想在发送响应对象之前验证一些用户凭据。

这是我的代码:

$scope.getEverything = function ()
    $http.get('http://localhost:1234/things').success(function(data)
        $scope.things = data;
    );
;

我尝试过使用以下语法的相同代码:

$http.method('path).then
$http.method(config)

我只是不知道如何传递一些数据。尝试使用 params:data 作为打印输出的配置对象:

GET http://localhost:1234/[object%20Object] 404(未找到)

在控制台上。

AngularJS 文档没有提及使用 GET 请求发送数据。我也尝试过 Stack 的一些答案,但大多数都已经过时并且无法正常工作。

我可以使用 GET 请求发送数据吗?或者这只是我的应用程序的一个设计错误?

【问题讨论】:

【参考方案1】:

您很可能需要使用 POST 方法而不是 GET 方法。

但要使用 GET 方法:

来自AngularJS passing data to $http.get request:

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

angular.http 为其提供了一个选项参数。

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

并使用AngularJS 来代替 POST:

$http.post('/someUrl', msg:'hello word!').
  then(function(response) 
    // this callback will be called asynchronously
    // when the response is available
  , function(response) 
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  );

【讨论】:

你为什么将 jQuery $.ajax 注入到一个角度问题中? angular 有它自己的 ajax api 为了清楚起见,我将两者都包括在内 如果 AngularJS 到位,我认为不应该直接使用 jquery,因为这将强制使用 $scope.$apply 并且还会破坏 angular 的可测试性(使 Protractor 停止等待请求结束) 我对其进行了修改,使其成为 100% Angular 好的,我将使用 POST 请求。我正在使用带有 Express 的 Node,并且我已经尝试使用 POST 请求来获取基于 req.body 的过滤数据。然后,我使用 res.json(obj) 将数据返回到客户端。谢谢你。我只是希望使用“正确”的方法词。【参考方案2】:

对于$http.get 请求,请使用配置对象的params 属性

$http.get(url, params: foo:'bar').then(func....

请参阅$http docs

Usage 部分中的 Arguments

【讨论】:

【参考方案3】:

如果您想使用 GET 方法传递一些数据,您可以在 $http 服务的 get 方法上传递参数选项。这将是 urlencode 参数

$http.get(url, 
  params: 
    query: 'hello world'
  
 

$http(
   url: url,
   method:'GET',
   params: 
     query:'Hello World'
   
)

但是,http 标准定义了将数据发送到服务器的 POST 方法。 GET 只是从中获取数据。关于角度的 post 方法:

$http(
  url: url,
  method:'POST',
  data: 
    query: 'Hello World'
  
)

检查来自GET 和POST 的official docs

【讨论】:

谢谢。但我不想使用查询参数。 :/我要和POST一起去。谢谢。 Post 是将数据发送到服务器的正确方式,get 参数是将数据附加到请求的 url。 exp: url?query=helloworld&otherparam=23。它的目的是细化请求选项。不向服务器发送数据。【参考方案4】:

试试

var req = 
 method: 'GET',
 url: 'http://localhost:1234/things',
 data:  test: 'test' 


$http(req).then(function()..., function()...);

【讨论】:

【参考方案5】:

正如@charlietfl 提到的,根据文档,您可以这样做来实现下载加载/总进度:

 $http.get(url,  
     eventHandlers: 
         'progress': function(evt) 
             $window.console.log(evt.loaded + '/' + evt.total);
         
     
  ).then(function(response)  ...

【讨论】:

以上是关于如何使用 AngularJS 中的一些数据进行 $http GET?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用angularjs动态显示表中的对象数组?

我们如何使用 spring security Ldap 以 angularjs 作为客户端进行身份验证

如何使用 ng-checked 进行函数调用:Angularjs

如何使用 Angularjs 将数据存储在本地存储中?

使用来自node.js的angularjs中的json数据作为后端和sql db

使用 AngularJS 比较表单验证中的两个输入值