После долгих часов отладки и попыток решить проблему, я наконец-то выяснил, в чем причина проблемы. Пожалуйста, позвольте мне объяснить
Из приложения Rails, когда я вызываю ajax-запросы вроде
jQuery.post( "/times/add"+ "?day_id=" + $('#day_id').val() + "&pool_id=" + $('#pool_id').val() ,null, function(data) {
$('#container').html(data);
}, "script");
, похоже, JQuery ожидает, что ответом будет «скрипт» (поскольку я использую опцию «скрипт» в методе jQuery.post). Но в моем контроллере приложения Rails я отвечал на этот запрос следующим образом:
respond_to do |format|
format.html { render :action => 'embed' }
format.js { render :partial => 'embed_' + @size, :locals => {:timetable_entries => @timetable_entries} }
end
Я отвечал на запрос частичным фрагментом, который представляет собой просто файл html.erb со смешанными кодами, включая JS, HTML и Ruby. И после тестирования в течение нескольких часов я обнаружил, что у меня все еще есть различные ошибки в firebug даже без javascript в данных ответа. Это дает мне ошибку «XML не может быть всей программой», когда у меня нет js-кода там. Поэтому после прочтения this я понимаю, что возвращаю данные ответов в неправильном формате.
Итак, я изменил свой контроллер, чтобы ответить следующим образом.
respond_to do |format|
format.html { render :action => 'embed' }
format.js
end
, который в основном будет ожидать, что файл 'add.js' обработает javascripts. Поэтому я создал add.js и поместил туда это.
$("#container").html("<%= escape_javascript(render :partial => 'embed_' + @size, :locals => {:timetable_entries => @timetable_entries}) %>");
Только тогда я не вижу больше ошибок в браузере. Я надеюсь, что это сэкономит часы разочарований для тех, у кого такая же проблема, как у меня.
Приветствие.