2011-09-19 24 views
5

Ok, tôi đã sử dụng ajax trong các ứng dụng đường ray của tôi trong một thời gian. Bằng cách nào đó, trong Rails 3.1 đầu tiên của tôi ứng dụng tôi có thể không nhận được những điều cơ bản để làm việc ..Không thể sử dụng UJS trong 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?'); 

Bây giờ, từ những gì tôi có thể nói, điền vào mẫu này nên kích hoạt các hộp cảnh báo. Nó không. Việc gửi biểu mẫu không đi tới hành động của trình điều khiển, điều này sẽ hiển thị mẫu:

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

Chỉ không có js nào được kích hoạt.

người giúp đỡ

Các UJS được nạp và hoạt động mặc dù (tôi nghĩ) vì nếu tôi làm ..

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

..it sẽ kích hoạt một hộp thoại xác nhận như mong đợi.

Tôi có thể thiếu gì? Mọi hướng nhìn sẽ được đánh giá cao.

Cảm ơn bạn, Erwin

UPDATE:

Vì vậy, có vẻ như đường ray được minh content-type sai trong tiêu đề, cung cấp text/html thay vì text/javascript. Sau một số thử nghiệm thậm chí:

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

vẫn sẽ làm một tiêu đề với nội dung kiểu text/html

Khi tôi chạy một ứng dụng mới với cùng một phiên bản của jquery-rails nó hoạt động. Trong ứng dụng này nó không ..

Tôi nên tìm ở đâu?

Trả lời

1

Tôi gặp vấn đề tương tự. Tôi đã thiết lập một ứng dụng thử nghiệm với cùng gemfile và nhận được kết quả tương tự như bạn đã mô tả: nó hoạt động trong ứng dụng mới được tạo nhưng không hoạt động trong ứng dụng cũ. Hiện tại, tôi đã đặt tiêu đề loại nội dung bằng tay trước cuộc gọi kết xuất thực tế.

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

này mặt khác không thay đổi content_type giao một cách chính xác:

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

Hope this helps cho thời điểm này.

Bạn có nhận được giải pháp thực sự trong thời gian chờ đợi không?

CẬP NHẬT:

Ít nhất tôi đã tìm thấy vấn đề thực sự của mình. Tôi có một before_filter buộc content_type vào văn bản/html mà tôi đã thêm để thử nghiệm một số thời gian trước đây và quên vô hiệu hóa:

def set_header 
response.headers["Content-Type"] = "text/html; charset=utf-8" 
end 
Các vấn đề liên quan