AJAX如何实现PUT和DELETE方法
目前我在jquery里只看到了POST和GET方法,现在很多RESTful接口都有PUT和DELETE接口,但是真正前端却没看到有调用这两种方法的,是浏览器不支持吗?还是什么其它原因?
Answers
Jquery里的POST和GET都是对ajax方法的封装,你可以自己进行封装。
$.ajax({
url: 'www.website.com',
type: 'DELETE',
data: {}
});
执行后就会有
Request Method:DELETE
的http头被传到后端。OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE都是可以使用的Http1.1(连IE7都支持,其他浏览器不可能不支持)。至于你说的实现问题,我认为不存在,只是你服务端有没有做相应的处理,HTTP是协议不是技术。
方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。
W3C有明确的说明。
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
其实这个问题挺浪费时间的
目前我在jquery里只看到了POST和GET方法
文档里写的很明白还有个$.ajax方法吧,$.post和$.get方法的文档也声明了他们只是对.ajax的封装,这是基本查文档的能力吧
$.ajax({
url: '/test',
type: 'DELETE',
data: {}
});
就在这个页面打开console运行上面这段代码,看看发出了什么请求?
真正前端却没看到有调用这两种方法的
基于Restful风格接口的前端框架不要太多,Backbone.js源码够清楚吧
你这个问题的答案,在Backbone.js源码里都有很清楚的交待:
Turn on emulateHTTP to support legacy HTTP servers. Setting this option will fake "PATCH", "PUT" and "DELETE" requests via the _method parameter and set a X-Http-Method-Override header.
链接: http://backbonejs.org/docs/backbone.html#section-14
Turn on Backbone.emulateHTTP in order to send PUT and DELETE requests as POST, with a _method parameter containing the true HTTP method, as well as all requests with the body as application/x-www-form-urlencoded instead of application/json with the model in a param named model. Useful when interfacing with server-side languages like PHP that make it difficult to read the body of PUT requests.