如何使用jQuery将JSON数据输出到Ruby on Rails?

15 ajax jquery json ruby-on-rails

我试图发送一个看起来像这样的jQuery Ajax PUT请求:

$.ajax({
      type: "PUT",
      url: '/admin/pages/1.json',
      data: { page : {...} },
      dataType: 'json',
      success: function(msg) {
        alert( "Data Saved: " + msg );
      }
});
Run Code Online (Sandbox Code Playgroud)

我的控制器大致如下:

      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
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误.

而评估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'(解析DELEGATION:2:)中__send__' (__DELEGATION__):2:in解析'/ 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上?

小智 7

设置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 );
    }
});
Run Code Online (Sandbox Code Playgroud)

在Ruby on Rails方面,必须要有JSON gem.在控制器中:

 params[:page] = JSON.parse params[:page] if params[:page].is_a? String
Run Code Online (Sandbox Code Playgroud)

它根本不漂亮,但它对我有用.


Cra*_*ntz 5

您需要在选项中设置contentType.contentType是您要发送的内容.dataType是您期望的.您应该仔细阅读有关ajax的options参数文档.