【问题标题】:How to correctly pass in JavaScript object to Rails back-end through HTTP headers?如何通过 HTTP 标头正确地将 JavaScript 对象传递给 Rails 后端?
【发布时间】:2015-08-26 18:24:19
【问题描述】:

我正在尝试使用 AJAX 将标头信息从 JavaScript 传递到 Rails 后端,但我似乎无法正确获取 user 的数据。

例如,我有以下代码:

var user_id = '114';
var headers = { user: { latitude: 37.3382, longitude: -121.8863 }, test: 'testing'};
$.ajax({
  type: 'GET',
  url: 'http://localhost:3000/users/' + user_id,
  headers: headers
});

在 Ruby on Rails 后端,我可以使用 request.headers['test'] 访问 test 键。它会给我带来我期望的价值,"testing"

但是,当我尝试通过request.headers['user'] 访问user 键时,我得到了"[object Object]" 的值。这不是我想要的,我希望能够获得用户的latitudelongitude 值。

我尝试了request.headers['user']['latitude']request.headers['user']['longitude'],在这两种情况下我都得到了nil 的结果。

我的问题是,如何修改上述代码,以便能够从 HTTP 标头在后端正确访问用户的纬度和经度?

我已经阅读了无数 Stack Overflow 问题,但这是我能得到的最接近的问题!

【问题讨论】:

  • 试试request.headers['user']['latitude']request.headers['user']['longitude']
  • 刚试过,我得到nil:/

标签: javascript ruby-on-rails ruby json


【解决方案1】:
var user_id = '114';
var headers = { user: JSON.stringify({ latitude: 37.3382, longitude: -121.8863     }), test: 'testing'};
$.ajax({
  type: 'GET',
  url: 'http://localhost:3000/users/' + user_id,
  headers: headers
});

然后在 ruby​​ 端使用 JSON.parse 来恢复对象。

【讨论】:

  • 我会把它改成var headers = JSON.stringify({ user: { latitude: 37.3382, longitude: -121.8863 }, test: 'testing'});
  • 这成功了!但是,听起来我必须为每个嵌套对象调用JSON.stringify。有没有更好的方法来处理嵌套对象,而不是在每个嵌套对象上调用JSON.stringify? @BrunoRomaszkiewicz 我试过了,但标题无法识别 usertest 键 >.nil
  • 为什么不使用 POST 并将数据作为数据而不是标题发布?您也可以将其存储在会话 cookie 中,它会自动在每个请求的标头中传递。
  • 据我了解,POST 请求通常由表单使用,在向数据库添加数据时?在此用户页面上,我正在检索用户的个人资料(以及用户的数据),并正在计算该用户与正在查看个人资料的当前用户的距离(因此,纬度和经度值)。也许我应该考虑使用会话 cookie,因为这似乎是一个可行的替代方案
  • 感谢@dinomix 的回答和cmets!我实际上想这样做,但昨天有人告诉我,使用headers(特别是对于 GET 请求)将数据从前端传递到后端是一种常见的做法(?)。但是,对于 POST,通常使用 data。如果您或任何人对此有意见,请分享,因为在我被告知之前,我一直使用 URL 参数(如您所建议的):)
猜你喜欢
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
相关资源
最近更新 更多