将Javascript对象发送到Rails控制器

时间:2017-01-05 05:53:49

标签: javascript ruby-on-rails ajax

使用Rails 4和原生Javascript(vanilla)。

我有以下Ajax调用,它返回place对象:

// place.js
function addPlace(place) {
  console.log(JSON.stringify(place));
  var xhr = new XMLHttpRequest();
  xhr.open("POST", "<%= Rails.application.routes.url_helpers.places_path %>", true);
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
  xhr.setRequestHeader("X-CSRF-Token", CSRF.token());
  xhr.send("place=" + JSON.stringify(place));
}

console.log(JSON.stringify(place))中,我得到以下JSON:

{"name":"San Francisco","url":"https://maps.google.com/?q=San+Francisco,+CA,+USA&ftid=0x80859a6d00690021:0x4a501367f076adff","utc_offset":-480,"vicinity":"San Francisco","html_attributions":[]}

这个参数被发送到Rails控制器:

# places_controller.rb
class PlacesController < ApplicationController
  def create
    abort params[:place].inspect
    @place = Place.find_or_create_by(source_id: params[:source_id])
    @place.save
    head :ok
  end
end

在第abort params[:place].inspect行中,它不显示整个加载,而只显示:

"{"name":"San Francisco","url":"https://maps.google.com/?q=San+Francisco,+CA,+USA"

由于url中的&&ftid=0x80859a6d00690021:0x4a501367f076adff被剥离。

问题

我应该如何正确地将Javascript对象(最好是Hash)传递给Rails控制器,以便我可以正确地将其保存在数据库中?

1 个答案:

答案 0 :(得分:1)

尝试:

encodeURIComponent(JSON.stringify(place))