2012-01-23 10 views
8

Dopo molto la risoluzione dei problemi, io non sono in grado di capire il motivo per cui l'Ajax di mia forma: callback successo non viene chiamato in rotaie 3.rotaie 3 - forma Ajax Ajax: evento successo non essere chiamato

seguito è il codice in ultima analisi, generato a mio avviso:

codice 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); 
    }); 
}); 

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

Seguendo la logica che avviene nell'azione cui la forma posti a:

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

Ho Firebugged questa intera richiesta/risposta:

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 

La risposta è, come previsto:

{"foo":"bar"} 

200 La risposta OK dovrebbe attivare "ajax: success" nel mio JS ... ma ciò non sta accadendo. qualche idea? La richiamata errore non è stato colpito o ...

+0

Qualcosa nella console JS? Il paren mancante nel JS è un refuso? –

+0

Nop, nessun errore nella console JS. Corretto il paren nel caso e ancora non funziona. Controllato anche nella console se l'evento 'ajax: success' è associato al modulo e lo ha. – deruse

+0

Aggiorna il codice nella domanda, quindi; farà fuori la gente. Non c'è "just in case"; senza di esso il JS è rotto. –

risposta

3

Dopo sprecare un sacco di tempo su questo, ho finalmente preso a lavorare nel modo seguente:

1) Spostamento del 'Ajax: il successo' vincolante per application.js piuttosto che nei tag nel mio partial.

2) Modifica $ (function() {}) per jQuery (function ($) {})

Non esattamente sicuro perché i due passaggi precedenti risolve il problema, ma lo fanno. Spero che sia d'aiuto!

10

Ho avuto lo stesso problema. Dopo 90 minuti di ricerche ho finalmente preso a lavorare utilizzando la seguente:

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

di credito a: https://stackoverflow.com/users/1609186/ivan-fong

stavo creando e poi cercando di eliminare quello che avevo appena creato, tutto tramite richieste Ajax. spero che questo possa aiutare qualcuno.

1

Funziona su form id come:

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

ho avuto lo stesso identico problema, e il proprio answer alla tua domanda mi ha anche aiutato. Ma penso che questa sia solo una soluzione per il vero problema.Ci sono due possibili situazioni in cui appare questo problema:

  1. avete aggiornato da Rails 2-3 e ancora utilizzando la libreria del prototipo (vedi Rails 3 AJAX remote form call backs)

  2. hai incorporato due jQuery Libraries (questo era il mio problema)

Quindi cerca nel tuo codice sorgente html se c'è un'altra libreria che è in conflitto con jQuery.

+0

+1 grazie amico! # 2 è il caso, non ha nemmeno pensato in questo modo – trushkevich

Problemi correlati