Rails удаленная форма обратного вызова ajax: загрузка не запускается, другие делают - PullRequest
4 голосов
/ 14 мая 2011

Вот мой код:

$('#fb_login_form').bind('ajax:loading', function() {alert("loading!");});
.bind('ajax:success', function(data, status, xhr) {alert("success!");})
.bind('ajax:failure', function(xhr, status, error) {alert("failure!");})
.bind('ajax:complete', function() {alert("complete!");});

ajax:success и ajax:complete огонь, и я вижу оба оповещения. ajax:loading нет.

Я использую jQuery вместо прототипов. Почему?

Ответы [ 3 ]

9 голосов
/ 14 мая 2011

Пожалуйста, исправьте имя вашего метода ajax-события с помощью ссылки ниже

http://docs.jquery.com/Ajax_Events

5 голосов
/ 14 сентября 2011

@ 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 или предварительной версии.

0 голосов
/ 31 августа 2013

Действительные обратные вызовы Ror Ajax :

ajax:beforeSend // equivalent to ajax:loading in earlier versions
ajax:success
ajax:complete
ajax:error // equivalent to ajax:failure in earlier versions
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...