3

目前我正在使用 angularJS 和 CoffeeScript 来尝试发送 post 请求,我的示例代码是:

login: (user, callback)=>
baseUrl = 'http://localhost:3000/api/v1/sessions'
@$http({
  method: 'POST',
  url: baseUrl,
  data: user
}).success (result)->
  callback(result)

但是当我调用它时,它只是发送“OPTIONS”请求而不是 POST 请求。
请求详细信息是: 在此处输入图像描述 如果我在此方法中添加标头,

login: (user, callback)=>
baseUrl = 'http://localhost:3000/api/v1/sessions'
@$http({
  method: 'POST',
  url: baseUrl,
  data: user,
  headers:
    'Content-Type': 'application/json'
}).success (result)->
  callback(result)

它仍然不起作用,但如果我将标题更改为 'Content-Type': 'application/x-www-form-urlencoded',那么它可以发送发布请求。
但是请求 Content-type 不是我想要的。

我还尝试通过以下方式将请求数据修改为 JSON: data: JSON.stringify(user),但仍然无法正常工作。

更新

伙计们,我在这个问题上做了另一个高峰。我是 jquery 来发送请求并且它工作正常,但我发现一个有线的东西是他们有不同的请求数据。

jQuery

$.ajax({
  type: "POST",
  url: "http://localhost:3000/api/v1/sessions",
  data: {
    "user":{
      "email":"wahxxx@gmail.com",
      "password":"123456"
    }
  },
  success: function(){

  }

Jquery 的屏幕截图 在此处输入图像描述

login: (user, callback)=>
baseUrl = 'http://localhost:3000/api/v1/sessions'
@$http({
  method: 'POST',
  url: baseUrl,
  data: {
    "user":{
      "email":"wahxxx@gmail.com",
      "password":"123456"
    }
  },
  headers:
    'Content-Type': 'application/x-www-form-urlencoded'
}).success (result)->
  callback(result)

现在它可以发送请求,但我在尝试请求时只得到 401。
角的屏幕截图 在此处输入图像描述

所以我认为这个问题可能是由于角度请求数据的格式。

4

1 回答 1

1

您正在达到 CORS 限制和同源政策。

最简单的解决方案是将 Web 前端和 api 作为一个应用程序一起部署。如果即使在同一台机器上端口也不同,则需要处理同源策略。

选项是一个预检查询。让你的后端接受它,它应该没问题。

更多阅读: http ://www.html5rocks.com/en/tutorials/cors/

于 2014-01-28T08:53:33.043 回答