Ruby on rails - 更新 ajax 的 PUT 方法
Posted
技术标签:
【中文标题】Ruby on rails - 更新 ajax 的 PUT 方法【英文标题】:Ruby on rails - PUT method on update ajax 【发布时间】:2012-08-03 14:01:57 【问题描述】:谁能告诉我为什么这个 PUT 方法不起作用。
$.ajax(
type: "PUT",
dataType: "script",
url: '/resources/35',
data:
resource : pos_y: 45, pos_x: 50
).done(function( msg )
alert( "Data Saved: " + msg );
);
服务器说我使用了 GET 方法,但在我的 ajax 请求中我有 type: "PUT"
Started GET "/resources/35?resource%5Bpos_y%5D=45&resource%5Bpos_x%5D=50&_=1344001820350" for 192.168.1.89 at 2012-08-03 15:50:20 +0200
Processing by ResourcesController#show as */*
Parameters: "resource"=>"pos_y"=>"45", "pos_x"=>"50", "_"=>"1344001820350", "id"=>"35"
User Load (0.3ms) SELECT "users".* FROM "users"
Resource Load (0.1ms) SELECT "resources".* FROM "resources" WHERE "resources"."id" = ? LIMIT 1 [["id", "35"]]
Rendered resources/show.html.erb within layouts/login (2.3ms)
Completed 200 OK in 238ms (Views: 235.9ms | ActiveRecord: 0.4ms)
resources_controller.rb
# PUT /resources/1
# PUT /resources/1.json
def update
@resource = Resource.find(params[:id])
respond_to do |format|
if @resource.update_attributes(params[:resource])
format.html redirect_to @resource, notice: 'successfully updated.'
format.js
else
format.html render action: "edit"
format.js
end
end
end
我试过添加 _method: 'put' 但还是一样
$.ajax(
type: "PUT",
dataType: "script",
url: '/resources/35',
data:
resource : pos_y: 45, pos_x: 50 ,
_method: 'put'
).done(function( msg )
alert( "Data Saved: " + msg );
);
服务器:
"resource%5Bpos_y%5D=45&resource%5Bpos_x%5D=50&method=put&=1344004390840"
Started GET "/resources/35?resource%5Bpos_y%5D=45&resource%5Bpos_x%5D=50&_method=put&_=1344004390840" for 192.168.1.89 at 2012-08-03 16:33:10 +0200
Processing by ResourcesController#show as */*
Parameters: "resource"=>"pos_y"=>"45", "pos_x"=>"50", "_"=>"1344004390840", "id"=>"35"
User Load (0.3ms) SELECT "users".* FROM "users"
Resource Load (0.1ms) SELECT "resources".* FROM "resources" WHERE "resources"."id" = ? LIMIT 1 [["id", "35"]]
Rendered resources/show.html.erb within layouts/login (0.8ms)
Completed 200 OK in 93ms (Views: 90.5ms | ActiveRecord: 0.4ms)
我将不胜感激。
【问题讨论】:
您的意思是 POST,而不是 PUT? .... 我更新了我的答案。你可以试试:-) 【参考方案1】:Rails 通过值为 'put' 的参数 _method 确定 put 请求。
由于并非所有浏览器都支持 put 方法,rails 在 form_tag 中作弊。它将这个输出放在一个 PUT 形式中:
<input type='hidden' name='_method' value='put'>
所以你要做的是:
$.ajax(
type: "POST",
dataType: "script",
url: '/resources/35',
contentType: 'application/json',
data: JSON.stringify( resource:pos_y:45,pos_x:50, _method:'put' )
).done(function( msg )
alert( "Data Saved: " + msg );
);
【讨论】:
嘿,效果很好。你能解释一下为什么我们将哈希转换为 JSON 字符串吗?JSON.stringify
以上是关于Ruby on rails - 更新 ajax 的 PUT 方法的主要内容,如果未能解决你的问题,请参考以下文章
在 AJAX 更新 Ruby on Rails 6 后,语义 UI 模式不会重新打开
使用 AJAX 请求下载文件数据 - ruby on rails 3