@ user531065 на самом деле прав, что Rails 3 реализует свои собственные имена обратных вызовов.Это реализовано в драйверах rails.js (Prototype) или jquery_ujs.js (jQuery).Оба этих драйвера играют роль javascript в создании ссылок AJAX и незаметных форм.
Я в процессе миграции приложения Rails 2.3 на Rails 3 и столкнулся с аналогичной проблемой, когда обратные вызовы не запускались.
Следует обратить внимание на то, что если вы используете драйвер Prototype, используйте Prototype для определения ваших обратных вызовов:
$('edit_foo').observe('ajax:before', loading_function());
$('edit_foo').observe('ajax:complete', complete_function());
Используйте синтаксис в исходном вопросе для драйвера Jquery UJS.Если вы не уверены, какой у вас драйвер UJS, проверьте public/javascripts
для rails.js или jquery_ujs.js.Это относится к Rails 3.0;Я считаю, что в Rails 3.1 изменяется использование jquery в качестве драйвера UJS по умолчанию.
Независимо от того, какой у вас драйвер UJS, вы сможете заглянуть внутрь файла и убедиться в наличии следующих обратных вызовов: ajax:beforeSend
,ajax:success
, ajax:complete
, ajax:error
.
На самом деле по нескольким причинам мои обратные вызовы AJAX не запускались:
- с использованием другой библиотеки javascript для определенияобратные вызовы от драйвера UJS
- , использующие обе библиотеки javascript одновременно (это можно сделать, но требует вызова
jQuery.noConflict()
) - , включают
prototype
сначала. - Вызовите
jQuery.noConflict()
после тегов включения jquery
, jquery_ujs
и application
javascript, но перед тегами включения для других библиотек js - Не вызывайте
javascript_include_tag :defaults
при использовании обеих библиотек, так какВы должны указать js include order
Edit : Ответ на ваш вопрос находится в этой ссылке .По-видимому, исходные 6 событий ajax, которые реализовал драйвер Rails UJS, были: ajax:before
, ajax:loading
, ajax:success
, ajax:failure
, ajax:complete
, ajax:after
.
Эти 6 были отредактированы до:
- AJAX: beforeSend
- AJAX: успех
- AJAX: завершено
- AJAX: ошибка
2-я причина ваших событий - потому что они не изменились.Другой не стрелял, потому что был удален.Вы, вероятно, просматривали старые документы, возможно, для ранней версии Rails 3 или предварительной версии.