Как я помещаю данные в Rails, используя JQuery
Я пытаюсь отправить запрос PUT JQuery Ajax, который выглядит следующим образом:
$.ajax({
type: "PUT",
url: '/admin/pages/1.json',
data: { page : {...} },
dataType: 'json',
success: function(msg) {
alert( "Data Saved: " + msg );
}
});
но я получаю следующую ошибку:
The error occurred while evaluating nil.name
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:29:in `merge_element!'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:18:in `parse'
(__DELEGATION__):2:in `__send__'
(__DELEGATION__):2:in `parse'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/core_ext/hash/conversions.rb:154:in `from_xml' ... ...
Это как Rails пытается разобрать параметры как XML, но я хочу использовать JSON!!
Что мне делать, чтобы поставить JSON на рельсы?
6 ответов
PUT и DELETE поддерживаются не всеми браузерами, RubyOnRails поддерживает передачу с вашими данными дополнительного параметра, называемого _method, который будет указывать, как RoR будет обрабатывать запрос.
$.ajax({
type: "POST",
url: '/admin/pages/1.json',
data: { _method:'PUT', page : {...} },
dataType: 'json',
success: function(msg) {
alert( "Data Saved: " + msg );
}
});
dataType
Параметр в jQuery - это не то, что вы отправляете, а скорее формат, в котором вы ожидаете получить ответ (да, это очень плохое имя). Если вы хотите отправить ваши данные на сервер в формате, отличном от application/x-www-form-urlencoded
ты должен использовать contentType
пары. Вы также должны сериализовать ваш data
:
$.ajax({
type: "PUT",
url: '/admin/pages/1.json',
data: JSON.stringify({...}),
contentType: 'application/json', // format of request payload
dataType: 'json', // format of the response
success: function(msg) {
alert( "Data Saved: " + msg );
}
});
Хорошо, на самом деле в моих данных JSON не было ключа страницы, моя ошибка. Так вот почему это было не правильно парсинга. Но теперь я получаю строку "[object Object]" в качестве значения для ключа страницы вместо хорошо проанализированного объекта json.
Где мне искать: JQuery или Rails?
РЕДАКТИРОВАТЬ:
Я решил мою проблему с приведением в порядок объекта json с помощью скрипта, найденного здесь: www.json.org/js.html:
$.ajax({
type: "PUT",
url: '/admin/pages/1.json',
data: { page : JSON.stringify( {...} ) },
dataType: 'json',
success: function(msg) {
alert( "Data Saved: " + msg );
}
});
На стороне рельсов должен быть джонс джем. В контроллере:
params[:page] = JSON.parse params[:page] if params[:page].is_a? String
var id = $('#route_id').val()
$.ajax({
type: 'PUT',
url: '/routes/'+ id,
data: $('#markerform').serializeArray(),
dataType: "JSON",
success: function(data) {
console.log(data);
}
});
У меня была похожая проблема [объект Object] с jQuery/rails, но с HTML, а не с JSON. Возможно, это поможет -
параметр [object Object]
data: { lesson: { date: drop_date } }
параметр lesson[date]
data: { "lesson[date]": drop_date }
надеюсь это поможет -
Возможно, вам просто нужно установить заголовки запроса на jQuery.
jQuery.ajaxSetup({
'beforeSend': function(xhr) {
xhr.setRequestHeader("Accept", "text/javascript");
}
})