2017-01-05 3 views
0

Rails 4とネイティブJavascript(バニラ)を使用しています。JavascriptオブジェクトをRailsコントローラに送信

私はplaceオブジェクトを返し、次のAjax呼び出し、持っている:console.log(JSON.stringify(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)); 
} 

を、私は次の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":[]} 

これはparamsは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&の剥がします。

質問

どのように私はきちんと私が正しくDBに保存することができるようにコントローラをレールにJavaScriptオブジェクト(好ましくはハッシュ)を渡す必要がありますか?

答えて

1

試してみてください。

encodeURIComponent(JSON.stringify(place) 
関連する問題