[英]How do I PUT JSON data to Ruby on Rails using jQuery?
我試圖發送一個看起來像這樣的jQuery Ajax PUT請求:
$.ajax({
type: "PUT",
url: '/admin/pages/1.json',
data: { page : {...} },
dataType: 'json',
success: function(msg) {
alert( "Data Saved: " + msg );
}
});
我的控制器大致如下:
respond_to do |format|
if @page.update_attributes params[:page]
format.html{ ... }
format.json{ render :json => {:saved => 'ok'}.to_json }
else
format.html{ ... }
format.json{ render :json => {:saved => 'fail'}.to_json }
end
end
但是我收到以下錯誤。
在評估nil.name /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:29:in merge_element!' /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:18:in
發生錯誤merge_element!' /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:18:in
merge_element!' /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:18:in
parse'( DELEGATION ):2:in __send__' (__DELEGATION__):2:in
parse' /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/core_ext/hash/conversions.rb:154:in`from_xml'......
就像Ruby on Rails試圖將參數解析為XML一樣,但我想使用JSON!
如何將JSON放到Ruby on Rails上?
設置contentType對我來說不起作用。 我得到一個字符串而不是params [:page]的哈希。
所以我解決了這個問題:
使用在JavaScript中的JSON中找到的腳本對JSON對象進行字符串化:
$.ajax({
type: "PUT",
url: '/admin/pages/1.json',
data: { page : JSON.strigify( {...} ) },
dataType: 'json',
success: function(msg) {
alert( "Data Saved: " + msg );
}
});
在Ruby on Rails方面,必須要有JSON gem。 在控制器中:
params[:page] = JSON.parse params[:page] if params[:page].is_a? String
它根本不漂亮,但它對我有用。
您需要在選項中設置contentType。 contentType是您要發送的內容。 dataType是您期望的。 您應該仔細閱讀有關ajax的options參數的文檔 。
如果您不想添加腳本,則可以這樣做
$.parseJSON("some_jsonish_string")
此外,抬頭,但Ruby on Rails 2.3.2中存在一個錯誤,導致無法正常工作。 請參閱Ruby on Rails 2.3 JSON“put”請求路由已損壞
您需要在選項中將contentType
設置為"application/json"
; dataType
只是您期望的結果。
此外,您需要使用JSON.stringify
序列化您的data
字段:
$.ajax({
type: "PUT",
url: '/admin/pages/1.json',
data: JSON.stringify({ page : {...} }),
contentType: 'application/json',
dataType: 'json',
success: function(msg) {
alert( "Data Saved: " + msg );
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.