2011-09-19 12 views
5

Ok, używam ajax w moich aplikacjach rails od dłuższego czasu. Jakoś w moim pierwszym Rails 3.1 aplikacja nie mogę uzyskać podstawy do pracy ..Nie można uzyskać UJS do pracy w 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?'); 

Teraz, z tego co mogę powiedzieć, Przesyłając ten formularz należy wywołać okno alertu. Tak nie jest. Przesłanie formularza przechodzi do działania kontrolera, które renderuje szablon:

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

Nie wywołuje się tylko js.

UJS pomocnicy są ładowane i działa choć (chyba), bo jeśli to zrobić ..

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

..To wywoła okno z potwierdzeniem, jak oczekiwano.

Czego mi brakuje? Każdy kierunek do zobaczenia byłby doceniony.

Dziękuję Erwin

UPDATE:

Więc wydaje szyny okazuje niewłaściwy typ zawartości w nagłówku, zapewniając text/html zamiast text/javascript. Po pewnym testów nawet:

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

będzie nadal czyni nagłówek z typem zawartości text/html

Kiedy uruchomić nową aplikację z tej samej wersji jquery-rails to działa. W tej aplikacji nie ma ..

Gdzie powinienem szukać?

Odpowiedz

1

Mam ten sam problem. Skonfigurowałem też aplikację testową z tym samym gemfile i otrzymałem taki sam wynik, jak opisałeś: działa w nowo utworzonej aplikacji, ale nie w starej. Na razie ręcznie ustawiam nagłówek typu zawartości przed faktycznym wywołaniem renderowania.

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

to z drugiej strony nie zmieniła content_type dostarczane poprawnie:

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

nadzieję, że pomoże w tym momencie.

Czy w międzyczasie otrzymałeś prawdziwe rozwiązanie?

AKTUALIZACJA:

Przynajmniej znalazłem mój prawdziwy problem. Mam before_filter wymuszający content_type na text/html, który dodałem do testowania jakiś czas temu i zapomniałem dezaktywować:

def set_header 
response.headers["Content-Type"] = "text/html; charset=utf-8" 
end 
Powiązane problemy