【问题标题】:How do I send a put request for Ruby on Rails via AJAX如何通过 AJAX 发送对 Ruby on Rails 的放置请求
【发布时间】:2013-03-12 06:50:21
【问题描述】:

我一直在谷歌搜索,但我似乎无法获得正确的设置,通过我在谷歌上看到的东西,我最终得到了这个:

var dataString = $('#markerform').serialize();
        var id = $('#route_id').val()
        $.ajax({
            type: 'POST',
            url:  '/routes/'+id,
            data: { "_method":"put", dataString},
            dataType: "JSON",
            success: function(data) {
                console.log(data);
            }
        });

这是我的路由控制器

def update
    @route = Route.find(params[:id])
    respond_to do |format|
        if @route.update_attributes
            format.html
            format.json { render text: "Done" }
        else
            format.json { render text: "Bad" }
        end
    end
end

但我最终得到了这个萤火虫错误:

SyntaxError: invalid object initializer
[Break On This Error]   

data: { "_method":"put", dataString},

我该如何清理它,以便通过这个应用程序获得一些成功。谢谢。

【问题讨论】:

  • type: 'PUT' 应该可以工作
  • @jvnill 但我读到它并非所有浏览器都兼容,我想确保我在整个过程中都兼容:)?
  • 不确定。但为了修复您的错误,您应该将附加数据附加到序列化属性中。如果我没记错的话,dataString 将是一个字符串,所以只需像 dataString + '&_method=put' 一样将 _method 添加到它,然后将它传递给像 data: dataString 这样的数据
  • @jvnill 你能看看我的控制器并告诉我为什么它在提交时给我一个 500 错误吗?
  • 啊酷。那么是什么解决了你的问题?

标签: jquery ruby-on-rails ajax ruby-on-rails-3


【解决方案1】:

试试这个(※用serializeArray代替serialize):

    $.ajax({
        type: 'PUT',
        url:  '/routes/'+$('#route_id').val(),
        data: $('#markerform').serializeArray(),
        dataType: "JSON",
        success: function(data) {
            console.log(data);
        }
    });

【讨论】:

    【解决方案2】:

    试试这个

    var dataString = $('#markerform').serialize();
            var id = $('#route_id').val()
            $.ajax({
                type: 'PUT',
                url:  '/routes/'+id,
                data: dataString,
                dataType: "JSON",
                success: function(data) {
                    console.log(data);
                }
            });
    

    【讨论】:

    • 但我读到它并非所有浏览器都兼容,我想确保我在整个过程中都兼容:)?
    • PUT 方法在 XHTML2.0 版本中提供。但是您可以通过 $.ajax 传递它,因为它只是作为参数传递,您的服务器将像现在一样处理方法类型 PUT。
    • 但是我收到了帖子底部列出的错误,我认为我的数据格式有误:知道是什么原因造成的吗?
    • 如您所说的Type,请删除“_method”:“put”,然后重试。
    【解决方案3】:

    已在How do I PUT data to Rails using JQuery 回复。基本上,Rails 允许您通过执行 POST 但添加值为“PUT”的“_method”参数来执行 PUT 调用(以及任何其他不受支持的调用)。

    【讨论】:

      猜你喜欢
      • 2012-07-19
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2014-05-18
      • 1970-01-01
      • 2018-06-21
      • 2012-10-01
      相关资源
      最近更新 更多