当前位置:  开发笔记 > 编程语言 > 正文

如何使用JQuery将数据输出到Rails

如何解决《如何使用JQuery将数据输出到Rails》经验,为你挑选了3个好方法。

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

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

但是我收到以下错误:

The error occurred while evaluating 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 `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' ... ...

就像Rails试图将params解析为XML,但我想使用JSON !!

如何将JSON放入rails?



1> duckyflip..:

所有浏览器都不支持PUT和DELETE,RubyOnRails支持使用名为_method的数据传递额外参数,这将指示RoR如何处理请求.

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


`data`是错误的,`dataType`不是需要设置的.因为这个答案丢了一个小时.
http://annevankesteren.nl/2007/10/http-method-support要我相信,否则(即,很多浏览器实际上做支持PUT和DELETE).
@pascalbetz:正确答案是lqc.这个答案将*不*让Rails将此请求解析为json,它只会返回json.
这似乎不是问题(任何现代网络浏览器真的缺乏对PUT的支持吗?).服务器/是/正在接收数据,只是没有以正确的方式解析它.
是的,大多数浏览器缺少PUT和DELETE,只有GET和POST.服务器可能正在获取错误操作的数据,即.如果是POST,它通常会映射到Create动作,PUT会映射到Update动作.
这对我不起作用,[下面的评论](http://stackoverflow.com/a/4036113/8137)给出了正确的答案:对发送的数据使用JSON.stringify,并设置contentType(不是dataType!)到'application/json'.

2> lqc..:

dataTypejQuery中的参数不是你发送的,而是指定你期望答案的格式(是的,这是一个非常糟糕的名字).如果要以其他格式将数据发送到服务器,application/x-www-form-urlencoded则应使用contentTypeparam.您还需要序列化您的data:

$.ajax({
      type: "PUT",
      url: '/admin/pages/1.json',
      data: JSON.stringify({...}),
      contentType: 'application/json', // format of request payload
      dataType: 'json', // format of the response
      success: function(msg) {
        alert( "Data Saved: " + msg );
      }
});



3> 小智..:

好吧,实际上我的JSON数据没有页面键,我的错误.这就是为什么它没有正确解析.但现在我得到"[object Object]"字符串作为页面键的值而不是一个很好解析的json对象.

我应该在哪里看:JQuery还是Rails?

编辑:

我已经解决了我的问题,用这里的脚本字符串化json对象:www.json.org/js.html:

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

在轨道上,必须要求json gem.在控制器中:

 params[:page] = JSON.parse params[:page] if params[:page].is_a? String

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有