2014-01-03 2 views
1

Я хочу загрузить набор объектов и визуализировать их с помощью Ajax и select элементов в HTML. Вот JQuery я использую, чтобы сделать запрос:Выполнение запроса POST с использованием jQuery Ajax и Rails

planner.js

$("select.semesterSelect").change(function(){ 
    $.ajax({ 
     type: "POST", 
     url: "/planners/events", 
     data: {timeperiod: {id: $(this).find(":selected").val()}}, 
     success: function(events){ 
     console.log("success"); 
     }, 
     error: function(){ 
     console.log("error"); 
     } 
    }); 
}); 

Здесь действие контроллера я использую, чтобы найти объекты, которые я хочу, чтобы сделать:

planners_controller.rb

def events 
@timeperiod = params[:timeperiod] ? Timeperiod.find(params[:timeperiod][:id]) : Timeperiod.find(Timeperiod.last.id) 
@events = Event.where("from_date >= :tp_from_date AND to_date <= :tp_to_date", {tp_from_date: @timeperiod.from_date, tp_to_date: @timeperiod.to_date}) 
respond_to do |format| 
    format.html 
    format.js 
end 
end 

Наконец, вот js.erb файл я использую для визуализации событий (я закомментировать строку рендеринга).

events.js.erb

//$("#events_div").html("<%= escape_javascript(render(:partial => 'planners/event')) %>"); 
console.log("here"); 

Когда я сделать выбор, используя эту установку, я получаю «успех» в журнале JS консоли. Однако я не вижу «здесь». Когда я раскомментирую линию рендеринга, я не создаю свои новые объекты.

Что я делаю неправильно?

Редактировать: Я исправил имена файлов. Редактировать 2: Ниже приведены ссылки, которые я использовал для форматирования этого кода.

"Работа с JavaScript в Rails": http://guides.rubyonrails.org/working_with_javascript_in_rails.html "как сделать оказывают частичное по методу успеха JQuery Ajax с рельсами 3": How to do render partial on jQuery ajax success method with rails 3

+1

Имеет ли содержащий div действительно атрибут id 'events_div'? – zeantsoi

+0

Да. Проблема в том, что event.js.erb вообще не вызывается. –

+1

Похоже, что это визуализируется, так как вы можете выйти из «' здесь », если вы удалите первую строку. Возможно, проблема в частичном «планировщике/событии»? – zeantsoi

ответ

0

Я решил проблему путем разделения planners/events действий на два событие следующим образом:

def events 
    @timeperiod = params[:timeperiod] ? Timeperiod.find(params[:timeperiod][:id]) : Timeperiod.find(Timeperiod.last.id) 
    @events = Event.where("from_date >= :tp_from_date AND to_date <= :tp_to_date", {tp_from_date: @timeperiod.from_date, tp_to_date: @timeperiod.to_date}) 
    respond_to do |format| 
     format.html 
    end 
    end 

    def events2 
    @timeperiod = params[:timeperiod] ? Timeperiod.find(params[:timeperiod][:id]) : Timeperiod.find(Timeperiod.last.id) 
    @events = Event.where("from_date >= :tp_from_date AND to_date <= :tp_to_date", {tp_from_date: @timeperiod.from_date, tp_to_date: @timeperiod.to_date}) 
    respond_to do |format| 
     format.js 
    end 
    end 

Как вы можете видеть, events2 делает JQuery и events делает HTML. Я также модифицировал функцию js для использования второй функции.

planner.js

$.ajax({ 
    type: "POST", 
    url: "/planners/events2". 
... 

Этот код выполняется в events2.js.erb. Это неудобно. У кого-нибудь есть решение, которое не включает разделение на два разных действия, как это? Я был бы рад принять лучшее решение.

0

Как я знаю о JQuery/Ajax с рельсами,

Здесь вы определили URL-адрес

url: "/planners/events", 

так что для этого вам необходимо определить метод событий в контроллере планировщиков.

и еще одна вещь для получения обновления на просмотр, вам необходимо создать файл events.js.erb.

+0

В контроллере планировщика есть файл событий и файл events.js.erb. Проверьте обновленное сообщение для правильных имен файлов. –

+0

удалите format.html из вашей отправки ответа. –

+0

Удаление 'format.html' останавливает страницу от рендеринга вообще –

0

Судя по ней, может быть несколько причин выпуска:

  1. Ваши маршруты могут не указывают на контроллер
  2. Вы не можете быть обработку запроса правильно на контроллере (порождение ошибка 500 сервер)

Я написал это как ответ, чтобы дать представление о том, как отладить это дальше:


Маршруты

Из того, что вы сказали, вы должны иметь эту установку маршрута:

#config/routes.rb 
resources :planners do 
    post :events 
end 

Хотя я не думаю, что это ваша проблема, было бы полезно, чтобы убедиться, что он присутствует


консоли разработчика

Если вы используете Chrome/Firefox, вы можете использовать developer console (right-click>inspect element>network), чтобы показать все AJAX-запросы для вашего сайта

я настоятельно рекомендую вам сделать это, чтобы увидеть, что ответ. Я думаю, что ваша ошибка вызвана контроллер вызывает ошибку 500 внутреннего сервера, который вы не будете знать о том, если вы не смотрите на сетевую активность & увидеть вкладку preview


Аякс «Успех»

Просто означает, что вы установили соединение с контроллером и получили ответ. Ответ может быть ошибкой, но Ajax не может сказать, потому что каждый ответ Rails является допустимой HTML-страницей

Я бы рекомендовал использовать вкладку «Инструменты разработчика» network, чтобы узнать, что происходит. Если вы можете вернуть более подробную информацию об ответе, мы будем в лучшем положении, чтобы помочь!

+0

У меня были '#get" планировщики/события "и' #post "планировщики/события" 'в' config/routes.rb'. Переключение на конфигурацию 'resources' не устранило ошибку. –

+0

Кроме того, я получаю статус 200 при просмотре вкладки «Сеть» (я использую Chrome). –

Смежные вопросы