HTTP PUT не является полностью кроссбраузерным, поэтому Rails (I ' m с использованием 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 лучшим способом?