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

如何为Rails和GWT模拟PUT/DELETE?

如何解决《如何为Rails和GWT模拟PUT/DELETE?》经验,为你挑选了2个好方法。

我想使我的应用程序有点REST兼容.我在后端使用Rails ,在前端使用GWT.我想做更新和删除.我意识到我可以做一些像mydomain.com/:id/delete(GET)这样的事情并完成同样的事情.但是,正如我之前所说,我希望有一个REST兼容的后端.因此,我想做mydomain.com/:id(DELETE)并让它隐式调用我的删除方法.

现在,我的理解是,如果浏览器(我的浏览器是GWT RequestBuilder)不支持DELETE/GET,Rails会以某种方式使用POST和其他一些url参数完成此任务.那么,我如何使用GWT RequestBuilder实现这一目标?



1> Christian Le..:

Rails使用隐藏属性执行此操作.解决这个问题的最简单方法是创建一个新的rails应用程序,生成一个脚手架并在浏览器中查看HTML.

试试这个:

rails jp
cd jp
./script/generate scaffold RequestBuilder name:string
rake db:migrate
./script/server 

然后导航到http:// localhost:3000/request_builders,单击New并查看HTML.你会看到类似的东西:

这是一个创建,方法是POST.输入名称,然后保存,然后编辑:


  

当然表单是用POST发送的,但是Rails有一个隐藏字段来模拟PUT请求.同样的删除,但脚手架将使用一些Javascript:

var m = document.createElement('input'); 
m.setAttribute('type', 'hidden'); 
m.setAttribute('name', '_method'); 
m.setAttribute('value', 'delete');

要让这个工作与另一个前端,你必须两个:

使用相同的样式URL,例如/ request_builders/1(RESTful URL)

包含隐藏字段(Rails技巧)


遗憾的是,这不能被视为完整的解决方案,因为它仅适用于URL编码数据(表单),并且不适用于JSON或XML,这是使用GWT执行请求的更常见方式

2> clacke..:

就像@skrat表示,_method=PUT解决方法不会对任何种类的身体在哪里工作Content-Type并不x-www-form-urlencoded如XML或JSON.幸运的是,还有一个标题解决方法:

https://zcox.wordpress.com/2009/06/17/override-the-http-request-method-in-jersey/

因此,要更新REST资源,只需对其地址执行POST并添加标头X-HTTP-Method-Override: PUT.Rails会将此解释为地址的PUT.

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