使用HTTP PUT通过Jquery和Rails 3发送JSON
HTTP PUT并不完全是跨浏览器,因此Rails(我使用的是Rails 3)支持使用POST并传递_method
查询参数。 这很好,但在发送JSON时它似乎不起作用。
例:
$.ajax({ url: window.location.pathname, type: 'POST', contentType: 'application/json', data: JSON.stringify({_method:'PUT', page:{my_data: 1}), dataType: 'json' });
当Rails看到这个时,它不会识别’_method’覆盖,因为它以JSON格式传递(也许转换是稍后的?)。 Rails返回错误“没有路由匹配…”说它找不到路由(到资源),我假设因为它与REST update = HTTP PUT动词不匹配,我甚至尝试将此附加到URL: ?_method=PUT
但得到了相同的结果。
唯一可行的方法是设置HTTP标头:
$.ajax({ url: window.location.pathname, type: 'POST', contentType: 'application/json', data: JSON.stringify({my_data: 1}), dataType: 'json', beforeSend: function(xhr){ xhr.setRequestHeader("X-Http-Method-Override","put"); } });
设置HTTP覆盖标头是最好的方法吗?
AJAX直接支持PUT
动词,所以为什么要_method
和自定义HTTP头:
$.ajax({ url: window.location.pathname, type: 'PUT', contentType: 'application/json', data: JSON.stringify({ page: { my_data: 1 }), dataType: 'json' });
还要确保您尊重相同的原始策略,或者jquery可能会尝试使用仅适用于GET
动词的JSONP。