2011-09-19 15 views
5

Ok, ho utilizzato ajax nelle mie app di rotaie per parecchio tempo. In qualche modo, nei miei primi Rails 3.1 app che non può avere le basi per lavorare ..Non riesco a far funzionare UJS in Rails 3.1

# application.js 
//= require jquery 
//= require jquery_ujs 

# the form 
= form_for @signup, :url => '/signup', :remote => true do |f| 
    = f.text_field :email, :class => 'email', :size => 26 
    = f.submit 'Notify me' 

# the controller 
def signup  # route.rb has 'match '/signup' => 'controller#signup' 
    respond_to do |format| 
    format.js 
    end 
end 

# view: signup.js.erb 
alert('wtf?'); 

Ora, da quello che posso dire, di questo modulo dovrebbe far scattare la finestra di avviso. Non è così. L'invio del modulo passa all'azione del controller, che rende il modello:

Rendered teaser_pages/signup.js.erb (0.1ms) 
Completed 200 OK in 8ms (Views: 7.2ms | ActiveRecord: 0.0ms) 

Solo js non viene attivato.

aiutanti

L'UJS vengono caricati e funzionanti anche se (credo) perché se lo faccio ..

link_to 'click me', '#', :confirm => 'confirmation box!' 

..è attiverà una finestra di conferma come previsto.

Cosa potevo mancare? Qualsiasi direzione da guardare sarebbe apprezzata.

Grazie, Erwin

UPDATE:

così sembra rotaie si sta rivelando il contenuto-tipo sbagliato nell'intestazione, fornendo text/html invece di text/javascript. Dopo alcuni test anche:

render :js => "alert('AHAHAHAHA');", :content_type => 'text/javascript' 

sarà ancora rendere un colpo di testa con il tipo di contenuto text/html

Quando eseguo una nuova domanda con la stessa versione di jquery-rails funziona. In questa applicazione non ..

Dove dovrei cercare?

risposta

1

Ho avuto lo stesso problema. Ho creato un'app di prova con lo stesso gemfile e ho ottenuto lo stesso risultato che hai descritto: funziona nell'app appena creata ma non nella vecchia. Per il momento ho impostato l'intestazione del tipo di contenuto a mano prima della chiamata di rendering effettiva.

respond_to do |format| 
    headers["Content-type"] = 'text/javascript' 
    format.js { render "the_template" } 
end 

Questo d'altra parte non ha modificato la content_type consegnato correttamente:

respond_to do |format| 
    format.js { render "the_template", :content_type => 'text/javascript' } 
end 

Spero che questo aiuti per il momento.

Hai trovato la vera soluzione nel frattempo?

UPDATE:

Almeno ho trovato il mio vero problema. Ho un before_filter forzando il content_type a text/html che ho aggiunto per testare qualche tempo fa e ho dimenticato di disattivare:

Problemi correlati