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 лучшим способом?