在Rest接口定义中,删除数据都是使用delete方法请求,但大部分浏览器并不支持该方法请求,该如何做?
Rails使用的方法使用Post模拟delete方法
delete 方法其实是post 方法,不过在传递参数的时候,需要增加如下的字段
当然,还需要增加 csrf_param 的值,否则,该操作无法完成。
jquery_ujs的具体实现如下
Rails使用的方法使用Post模拟delete方法
delete 方法其实是post 方法,不过在传递参数的时候,需要增加如下的字段
_method: delete所以,不要使用get请求 delete方法,需要使用post,并且带上一个额外的参数 _method=delete 即可
当然,还需要增加 csrf_param 的值,否则,该操作无法完成。
jquery_ujs的具体实现如下
// Handles "data-method" on links such as:
// <a href="/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a>
handleMethod: function(link) {
var href = rails.href(link),
method = link.data('method'),
target = link.attr('target'),
csrf_token = $('meta[name=csrf-token]').attr('content'),
csrf_param = $('meta[name=csrf-param]').attr('content'),
form = $('<form method="post" action="' + href + '"></form>'),
metadata_input = '<input name="_method" value="' + method + '" type="hidden" />';
if (csrf_param !== undefined && csrf_token !== undefined) {
metadata_input += '<input name="' + csrf_param + '" value="' + csrf_token + '" type="hidden" />';
}
if (target) { form.attr('target', target); }
form.hide().append(metadata_input).appendTo('body');
form.submit();
},