Как я помещаю данные в Rails, используя JQuery - PullRequest
49 голосов
/ 26 мая 2009

Я пытаюсь отправить запрос 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 ]

85 голосов
/ 26 мая 2009

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 );
          }
});
37 голосов
/ 27 октября 2010

Параметр dataType в jQuery - это не то, что вы отправляете, а скорее указывает формат, который вы ожидаете, что ответ будет (да, это очень плохое имя). Если вы хотите отправить ваши данные на сервер в формате, отличном от application/x-www-form-urlencoded, вам следует использовать contentType param. Вам также нужно сериализовать ваш 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 );
      }
});
5 голосов
/ 26 мая 2009

Хорошо, на самом деле в моих данных JSON не было ключа страницы, моя ошибка. Так вот почему это было не правильно парсинга. Но теперь я получаю строку «[object Object]» в качестве значения ключа страницы вместо хорошо проанализированного объекта json.

Где мне искать: JQuery или Rails?

EDIT:

Я решил мою проблему с приведением в порядок объекта 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 );
      }
});

На стороне рельсов необходим json gem. В контроллере:

 params[:page] = JSON.parse params[:page] if params[:page].is_a? String
1 голос
/ 27 октября 2016
var id = $('#route_id').val()
$.ajax({
    type: 'PUT',
    url:  '/routes/'+ id,
    data: $('#markerform').serializeArray(),
    dataType: "JSON",
    success: function(data) {
        console.log(data);
    }
});
1 голос
/ 07 декабря 2009

У меня была похожая проблема [объект Object] с jQuery / rails, но с HTML, а не с JSON. Возможно, это поможет -

параметр [object Object]

data: { lesson: { date: drop_date } }

параметр lesson[date]

data: { "lesson[date]": drop_date }

надеюсь, это поможет -

0 голосов
/ 22 декабря 2010

Возможно, вам просто нужно установить заголовки запросов на jQuery.

jQuery.ajaxSetup({ 
  'beforeSend': function(xhr) {
    xhr.setRequestHeader("Accept", "text/javascript");
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...