2011-09-19 25 views
5

Ok, he estado usando ajax en mis aplicaciones de rails durante bastante tiempo. De alguna manera, en mis primeros carriles 3.1 aplicación que no puede obtener las bases para trabajar ..No se puede hacer que UJS funcione en 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?'); 

Ahora, de lo que puedo decir, entregando el formulario debe desencadenar el cuadro de alerta. No es así El envío del formulario pasa a la acción del controlador, que representa la plantilla:

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

Solo no se activa js.

ayudantes

El EPU se cargan y funcionando aunque (creo) porque si lo hago ..

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

..es activará un cuadro de confirmación como se esperaba.

¿Qué podría estar perdiendo? Cualquier dirección para mirar sería apreciada.

Gracias, Erwin

ACTUALIZACIÓN:

por lo que parece rieles está demostrando el tipo de contenido incorrecto en el encabezado, proporcionando text/html en lugar de text/javascript. Después de algunas pruebas, incluso:

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

todavía rendirá un encabezado con el tipo de contenido text/html

Cuando ejecuto una nueva solicitud con la misma versión de jquery-rails funciona. En esta aplicación, no ...

¿Dónde debería estar mirando?

Respuesta

1

Tengo el mismo problema. También configuré una aplicación de prueba con el mismo archivo gem y obtuve el mismo resultado que el que describió: funciona en la aplicación recién creada pero no en la anterior. Por el momento, establezco el encabezado del tipo de contenido a mano antes de la llamada de renderización real.

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

Esto, por otra parte, no cambiaba el content_type entregado correctamente:

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

Esperanza esto ayuda por el momento.

¿Obtuvo la solución real mientras tanto?

ACTUALIZACIÓN:

Al menos he encontrado mi verdadero problema. Tengo un before_filter forzando el content_type a text/html que agregué para probar hace algún tiempo y me olvidé de desactivar:

def set_header 
response.headers["Content-Type"] = "text/html; charset=utf-8" 
end 
Cuestiones relacionadas