$ http.get不在请求正文中发送数据

时间:2017-03-29 20:21:45

标签: javascript angularjs google-chrome

使用angular v1.3.1我试图实现一个Facade,以便在Web应用程序的后端向REST + JSON接口发出http请求时,我遇到了一个单一的问题。

我在代码中得到了类似的内容:

findSomething(value: number): ng.IPromise<api.DrugIndication[]> {
  const getParams = { 'param' : 'value' };
  const config:ng.IRequestShortcutConfig = {
    headers: {
      "Content-Type" : "application/json"
    },
    data: getParams
  }
  return this.$http.get(url,config);
}

当有时间来调用它时,我得到了一个400 Bad Request(顺便说一下:一个乐队的好名字!),因为后端(用Scala制作)会立即拒绝请求。因此,在请求中进行检查时,我发现在请求/消息正文中没有发送任何数据。

那么我如何使用angular&#34; $ http.get&#34;发送一些数据和HTTP Get请求?

其他信息:如果我使用ubuntu shell中的curl命令发出make请求,则不会发生。所以Chrome和angular.js之间可能存在问题

2 个答案:

答案 0 :(得分:1)

如果您检查chrome开发工具中的网络选项卡,您将看到这是一个飞行前OPTIONS请求(跨源资源共享(CORS))。

你有两种方法可以解决这个问题。

  1. 客户端(这要求您的服务器不需要application / json值)

    • 仅限GET,POST,HEAD方法
    • 仅浏览器设置标题加上these
    • 仅限内容类型:
      • application / x-www-form-urlencoded
      • multipart / form-data
      • 文本/纯
  2. 服务器端

    • 在您的服务器框架上设置类似这样的中间件:

      if r.Method == "OPTIONS" {
          w.Header().Set("Access-Control-Allow-Origin", "*")
          w.Header().Set("Access-Control-Allow-Methods", "GET")
          w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Authorization")
          w.Header().Set("Access-Control-Max-Age", "86400") // firefox: max 24h, chrome 10min
          return
      }
      
  3. 对于您的特定框架,this应该正常工作

答案 1 :(得分:1)

使用config.data将在请求正文中发送数据,使用

config.params = getParams 

这来自文档:

params - {Object。} - 将使用paramSerializer序列化并附加为GET参数的字符串或对象的映射