簡體   English   中英

如何使用jQuery將JSON數據輸出到Ruby on Rails?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM