Rails 3 AJAX удаленной формы обратного вызова - PullRequest
17 голосов
/ 16 сентября 2010

Я обновляю рельсы 2.3.8 до 3.0.0, поэтому мне нужно заменить вспомогательные вызовы remote_form_for на form_for(@object, :remote=>true).

Я следовал вместе с Симон Карлетти , но, похоже, я не могу получить ответные вызовы ajax от rails.js для запуска.

Мой сгенерированный HTML-код:

<form accept-charset="UTF-8" action="/vendor_shipments" class="new_vendor_shipment" data-remote="true" id="formname" method="post">

JavaScript, с которым я тестирую:

jQuery(function($){ 
   alert('document ready');
   $("#formname")
      .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-запрос успешно выполняется (данные отправляются на сервер), но ни один из обратных вызовов ajax:____ не срабатывает.

Что я делаю не так?

(для чего это стоит, сама форма загружается через ajax)

Ответы [ 3 ]

20 голосов
/ 16 сентября 2010

Ого, это была колоссальная трата вечера.

Делая это так, как я, прототип по умолчанию rails.js не будет связывать обратные вызовы.

После преобразования вjQuery rails.js (http://github.com/rails/jquery-ujs) обратные вызовы работают нормально.

2 голосов
/ 13 сентября 2011

Вы можете запускать обратные вызовы на основе прототипов следующим образом:

$('formname').observe('ajax:before', function(){
  ...
});

$('formname').observe('ajax:complete', function(request){
  ...
});

Однако я не думаю, что объект request в обратном вызове ajax:complete содержит ответ ,Я привык к jQuery и надеялся, что доступ к ответу будет простым.Вместо этого, похоже, что переключение на jQuery-Rails все еще может быть проще, поскольку я не могу найти выпадающий код Prototype, который заменил бы функциональность :update на удаленных помощниках Rails 2.

0 голосов
/ 26 мая 2013

Если принятый ответ не устранил вашу проблему, проверьте, не встроили ли вы несколько библиотек jQuery.В моем случае были встроены две разные версии jQuery, и после удаления одной из них все работало нормально.

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