рельсы 3 - форма ajax ajax: событие успеха не вызывается - PullRequest
8 голосов
/ 23 января 2012

После долгих ошибок я не могу понять, почему ajax моей формы: обратный вызов успеха не вызывается в rails 3.

Ниже приведен код, сгенерированный на мой взгляд:

Код JS:

$(function() {
  $("#myform").bind('ajax:success', function(data, status, xhr) {
    alert("form success");
    console.log(data);
    console.log(status);
  }).bind('ajax:error', function(xhr, status, error) {
    console.log(error);
    console.log(status);
  });
});

Форма Ajax:

<form accept-charset="UTF-8" action="/myc/mya" data-remote="true" id="myform" method="post">       <div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="hZuhxwboQj2qo8MPIR8DWwYMqAC1V2yqG+DX9UnlIr0=" /></div>
          <input class="large" id="foo" name="foo" type="text" />
        <input class="btn success" data-disable-with="Working..." name="commit" type="submit" />
        </form>

Следуя логике, которая происходит в действии, которому отправляет форма:

 @foo = { :foo => "bar" }
 render(:json => @foo.to_json, :content_type => 'application/json',
        :layout => false)

У меня есть весь запрос / ответ Firebugged:

It says 200 OK. And the Response Headers are:

Cache-Control   max-age=0, private, must-revalidate
Connection  Keep-Alive
Content-Length  13
Content-Type    application/json; charset=utf-8
Date    Mon, 23 Jan 2012 10:37:19 GMT
Etag    "9bb58f26192e4ba00f01e2e7b136bbd8"
Server  WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
Set-Cookie  _session_id=BAh7CkkiD3Nlc3Npb25faWQGOgZFRiIlMGIzZGRhZDQ2ZjNmYzUzOWJkMzBkZWMxZDBmMDgwODZJIhBfY3NyZl90b2tlbgY7AEZJIjFoWnVoeHdib1FqMnFvOE1QSVI4RFd3WU1xQUMxVjJ5cUcrRFg5VW5sSXIwPQY7AEZJIhJyZXF1ZXN0X3Rva2VuBjsARkkiMGlCVmFZYllrU2R1RHl2aVZ4ZGc3ZWxKdmVxZkdFa1VKYWVXaHU0eXBmR1kGOwBUSSIZcmVxdWVzdF90b2tlbl9zZWNyZXQGOwBGSSIwcFdGTUVTUGt6d2VSY1pzV2YxU3JLNmFJSEpCU3FGMDh2ZmZ2U0pFaVI4cwY7AFRJIhRjdXJyZW50X3VzZXJfaWQGOwBGSSIpZDZiZDdhMjYtNDRjNi0xMWUxLTkwMDItZmExMjJjNjJmZTFmBjsARg%3D%3D--78099c697506ede3c7e9a833efa1785c6f1b9a6e; path=/; HttpOnly
X-Runtime   0.354051
X-Ua-Compatible IE=Edge

Ответ, как и ожидалось:

{"foo":"bar"}

200 Ответ OK должен вызвать «ajax: success» в моем JS ... но этого не происходит. Какие-нибудь мысли? Ошибка обратного вызова также не срабатывает ...

Ответы [ 4 ]

10 голосов
/ 19 ноября 2012

У меня была такая же проблема. После 90 минут поиска я наконец-то начал работать с помощью следующего:

$(document).on('ajax:success', '.delete', function(e) {
    $(e.currentTarget).closest('div').fadeOut();
});

Кредит: https://stackoverflow.com/users/1609186/ivan-fong

Я создавал, а затем пытался удалить то, что только что создал, все через ajax-запросы. надеюсь, это кому-нибудь поможет.

3 голосов
/ 23 января 2012

Потратив гораздо больше времени на это, я наконец заставил его работать, выполнив следующее:

1) Переместив привязку «ajax: success» в application.js, а не в теги в моемчастично.

2) Изменение $ (function () {}) на jQuery (function ($) {})

Не совсем точно, почему два вышеупомянутых шага решают проблему, но это так.Надеюсь, это поможет!

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

У меня была точно такая же проблема, и ваш собственный ответ на ваш вопрос также помог мне.Но я думаю, что это только обход настоящей проблемы.При возникновении этой проблемы возможны две ситуации:

  1. Вы обновились с Rails 2 до 3 и все еще используете библиотеку прототипов (см. Удаленные обратные вызовы AJAX в Rails 3 )

  2. Вы встроили две библиотеки jQuery (это была моя проблема)

Так что смотрите в исходном HTML-коде, если естьдругая библиотека, которая находится в конфликте с jQuery.

1 голос
/ 07 февраля 2013

Работает с идентификатором формы как:

$("form#some_id").bind('ajax:success', function(){ ..... })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...