Вывод jSON в приложение rails - PullRequest
       4

Вывод jSON в приложение rails

10 голосов
/ 26 сентября 2010

ок, новый разработчик rails 3 здесь.

Я хочу, чтобы мой jquery мог получить объект json из приложения rails 3 для проектов.Вот мой контроллер.

def yourprojects
  @projects = Projects.all(current_user)

  respond_to do |format|
    format.html # index.html.erb
    format.json  { render :json => @projects }
  end
end

Я добавил строку format.json ... в jquery у меня есть:

$.ajax({url: '/projects/yourprojects', dataType: 'json'});

Так что это должно работать, подумал я.Вместо этого сервер возвращает: «Шаблон отсутствует» «Отсутствует шаблон ,,,, с {: locale => [: en,: en],: handlers => [: rjs,: rhtml,: builder,: rxml,:erb],: format => [: html]} в путях просмотра "

вам нужен шаблон для возврата jsOn?Разве приложение rails 3 не знает, как форматировать JSON?

Файл маршрутов:

resources :projects do
    collection do
        get 'yourprojects'  
    end
end

Ответы [ 3 ]

6 голосов
/ 26 сентября 2010

Вы можете установить заголовок Accept: application/json для реального REST или добавить формат в URL для быстрого взлома:

$.ajax({url: '/projects/yourprojects.json', dataType: 'json'});
5 голосов
/ 26 сентября 2010

Это не проблема Rails, а AJAX / jQuery, не отправляющий заголовок Accept: Попробуйте это:

$.ajax({
   url: 'url_to_action', dataType: "json",
     beforeSend : function(xhr){
       xhr.setRequestHeader("Accept", "application/json")
     },
     success : function(data){
       //.. do something with data
     },
     error: function(objAJAXRequest, strError, errorThrown){
       alert("ERROR: " + strError);
     }
  }
);

Если все ваши запросы AJAX ожидают JSON, вы можете установить заголовок глобально:

$.ajaxSetup({
  dataType: 'json',
  'beforeSend' : function(xhr){
    xhr.setRequestHeader("Accept", "application/json")
  } 
});

Другим вариантом будет добавление .json к пути или data:{format: 'json'} к $.ajax хешу параметров. Rails по умолчанию поддерживает суффиксы пути к формату для маршрутизации resoures. Просто попробуйте rake routes чтобы увидеть.

0 голосов
/ 26 сентября 2010
:formats=>[:html]

Это говорит о том, что сервер думает, что запрашивается html. Попробуйте добавить .json к вашему пути (и возможному маршруту), и это приведет к форматированию. Чтобы сделать это, потребуется маршрут примерно такой:

map.your_projects '/projects/yourprojects.:format',
  :controller => 'projects',
  :action => 'yourprojects'

Так или иначе, params[:format] должно быть "json" для этого запроса, чтобы обработчики формата могли делать правильные вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...