2012-01-23 13 views
8

Po wielu usterek, nie jestem w stanie zrozumieć, dlaczego moja forma jest ajax: sukces wywołania zwrotnego nie jest wywoływana w szynach 3.szyny 3 - formularz ajax ajax: sukces zdarzenie nie są nazywane

Poniżej znajduje się kod ostatecznie generowane moim zdaniem:

Kodeksu 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:

<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> 

zgodnie z logiką, co dzieje się w działania, które słupkami, celem utworzenia:

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

Mam Firebugged tę całą żądanie/odpowiedź:

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 

odpowiedź jest, zgodnie z oczekiwaniami:

{"foo":"bar"} 

200 Odpowiedź OK powinna wywołać "ajax: success" w moim JS ... ale tak się nie dzieje. jakieś pomysły? Callback błąd nie jest hit albo ...

+0

Cokolwiek w konsoli JS? Czy brakujący pars w JS to literówka? –

+0

Nop, brak błędów w konsoli JS .. Naprawiono paren na wszelki wypadek i nadal nie działa. Również zaznaczone w konsoli, jeśli zdarzenie "ajax: success" zostało powiązane z formularzem i miało to miejsce. – deruse

+0

Zaktualizuj kod w pytaniu, a następnie; to będzie ich ludzie. Nie ma "tak na wszelki wypadek"; bez niego JS jest zepsuty. –

Odpowiedz

3

Po tracić dużo więcej czasu na to, że w końcu go do pracy, wykonując następujące czynności:

1) Przesuwanie „ajax: sukces” wiązania application.js zamiast w tagach w moim częściowym.

2) Zmiana $ (function() {}) jQuery (function ($) {})

Nie dokładnie pewien, dlaczego powyższe dwa kroki rozwiązać ten problem, ale robią. Mam nadzieję, że to pomoże!

10

Miałem ten sam problem. Po 90 minutach poszukiwań wreszcie dostałem go do pracy przy użyciu następujących:

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

kredytowe: https://stackoverflow.com/users/1609186/ivan-fong

byłem tworzenia, a następnie stara się usunąć to, co właśnie stworzył, wszystko za pośrednictwem żądań AJAX. mam nadzieję, że to może komuś pomóc.

1

Działa na formularzu id jak:

$("form#some_id").bind('ajax:success', function(){ ..... }) 
2

miałem dokładnie ten sam problem i własne answer do Twojego pytania pomógł mi również. Ale myślę, że to tylko obejście prawdziwego problemu.Istnieją dwie możliwe sytuacje, kiedy problem ten pojawia się:

  1. pan przeniesieni z Rails 2 do 3, a jeszcze przy użyciu biblioteki prototyp (patrz Rails 3 AJAX remote form call backs)

  2. pan wbudowane dwa jQuery biblioteki (w tym był mój problem)

Sprawdź w kodzie źródłowym HTML, czy istnieje inna biblioteka, która jest w konflikcie z jQuery.

+0

+1 dzięki! # 2 to sprawa, nawet nie myślał w ten sposób – trushkevich

Powiązane problemy