Как установить данные JSON в Ruby on Rails с помощью jQuery?

Я пытаюсь отправить запрос JQuery Ajax PUT, который выглядит следующим образом:

$.ajax({
      type: "PUT",
      url: '/admin/pages/1.json',
      data: { page : {...} },
      dataType: 'json',
      success: function(msg) {
        alert( "Data Saved: " + msg );
      }
});

Мой контроллер выглядит примерно так:

      respond_to do |format|
         if @page.update_attributes params[:page]
           format.html{ ... }
           format.json{ render :json => {:saved => 'ok'}.to_json }
         else
           format.html{ ... }
           format.json{ render :json => {:saved => 'fail'}.to_json }
         end
       end

но я получаю следующую ошибку.

Ошибка произошла при оценке 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разбор «( ДЕЛЕГАЦИЯ ): 2: в __send__' (__DELEGATION__):2:inразборе» / Библиотека / Ruby / Gems / 1.8 / gems / activesupport-2.3.2 / lib / active_support / core_ext / hash / convertions.rb: 154: in `from_xml '... ...

Это похоже на то, что Ruby on Rails пытается проанализировать параметры как XML, но я хочу использовать JSON!

Что мне делать, чтобы поставить JSON на Ruby on Rails?

jquery,ruby-on-rails,ajax,json,

15

Ответов: 5


Установка $ . ajax ({ type : "PUT" , url : '/admin/pages/1.json' , data : { страница : JSON . strigify ( {...} ) }, dataType : 'json' , success : function ( msg ) { alert ( "Сохраненные данные:" + msg ); } }); не работал для меня. Я получал строку вместо хэша для параметров [: page].

Поэтому я решил это так:

Строка объекта JSON со сценарием, найденным в JSON в JavaScript :

 params[:page] = JSON.parse params[:page] if params[:page].is_a? String

На стороне Ruby on Rails требуется жемчужина JSON. В контроллере:

$.parseJSON("some_jsonish_string")

Это совсем не очень, но это сработало для меня.


Вам нужно установить contentType в своих настройках. contentType - это то, что вы отправляете. contentType - это то, что вы ожидаете назад. Вы должны внимательно прочитать документацию по аргументу options для ajax .


2

Если вы не хотите добавлять скрипты, вы можете сделать

"application/json"

2

Кроме того, голова, но есть ошибка в Ruby on Rails 2.3.2, которая мешает этому работать. См. Ruby on Rails 2.3 JSON «put» запрос маршрутизации нарушен


1

Вам нужно установить , contentTypeчтобы dataTypeв ваших вариантах; dataTypeэто то, что вы ожидаете.

Кроме того, вам необходимо сериализовать свое dataполе, используя JSON.stringify:

$.ajax({
    type: "PUT",
    url: '/admin/pages/1.json',
    data: JSON.stringify({ page :  {...} }),
    contentType: 'application/json',
    dataType: 'json',
    success: function(msg) {
        alert( "Data Saved: " + msg );
    }
})
JQuery, рубин-на-рельсы, AJAX, JSON,
Похожие вопросы