2013-03-12 58 views
2

我一直在使用谷歌搜索,但我似乎无法得到正确的设置,通过我在谷歌上看到的东西我最终与此:如何通过AJAX发送对Ruby on Rails的请求

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}, 

我可能ç依靠这个,所以我可以通过这个应用程序获得一些成功。谢谢。

+0

'类型:“PUT''应该工作 – jvnill 2013-03-12 06:51:17

+0

@jvnill但我读这不是所有的浏览器兼容的,我想确保我整个兼容:)全路? – Datsik 2013-03-12 06:51:42

+0

不确定。但为了解决您的错误,您应该将附加数据附加到序列化属性。如果我没有记错,dataString将是一个字符串,所以只需添加到_method像'dataString +“&_method = put'',只是把它传递给数据,如'数据:dataString' – jvnill 2013-03-12 07:00:09

回答

2

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

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

试试这个

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); 
      } 
     }); 
+0

但我读了它并不是所有的浏览器兼容,我想确保我在整个过程中兼容:)? – Datsik 2013-03-12 06:53:44

+0

PUT方法采用XHTML2.0版本。但是你可以通过$ .ajax传递它,因为它只是作为一个参数,你的服务器将像现在一样处理方法类型PUT。 – 2013-03-12 07:29:59

+0

但是我收到了我的帖子底部列出的错误,我想我的数据格式是错误的:任何想法是什么造成的? – Datsik 2013-03-12 07:33:18

-1

它在How do I PUT data to Rails using JQuery已回答了。基本上,Rails可以通过执行POST来执行PUT调用(&任何其他不受支持的调用),但是会添加一个“_method”参数,其值为“PUT”。