Rails 3 AJAX удаленная форма обратного вызова
Я обновляюсь с rails 2.3.8 до 3.0.0, поэтому мне нужно заменить remote_form_for
вспомогательные вызовы form_for(@object, :remote=>true)
.
Я слежу вместе с Simone Carletti, но я не могу получить ответные сообщения 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)
Ответы
Ответ 1
Ничего себе, это была колоссальная трата вечера.
Выполняя это так, как я сделал, прототип по умолчанию rails.js
не будет связывать обратные вызовы.
После преобразования в jQuery на основе rails.js
(http://github.com/rails/jquery-ujs) обратные вызовы работают нормально.
Ответ 2
Вы можете инициировать обратные вызовы на основе Prototype, например:
$('formname').observe('ajax:before', function(){
...
});
$('formname').observe('ajax:complete', function(request){
...
});
Однако, я не думаю, что объект request
в обратном вызове ajax:complete
содержит ответ. Я привык к jQuery и надеялся, что доступ к ответу будет простым. Вместо этого, похоже, что переход на jQuery-Rails может быть проще, поскольку я не могу найти код прототипа Drop-in, чтобы заменить функциональность :update
у удаленных помощников Rails 2.
Ответ 3
Если принятый ответ не устранил вашу проблему, проверьте, есть ли у вас встроенные библиотеки jQuery. В моем случае у меня была две разные версии встроенного jQuery и после удаления одного из них все работало нормально.