2010-01-06 35 views
10

Tôi đang cố gắng sử dụng jQuery và mọi thứ đều tuyệt vời, cho đến bây giờ, khi tôi đang cố gắng hiển thị một phần và thêm nó vào div. Dưới đây là làm thế nào tôi có nó thiết lập:Các tệp Rails, jQuery, .js.erb, JS không được thực hiện bởi trình duyệt

Tôi có một hành động mà đáp ứng js:

def index 
    @objects = Object.find(:all) 

    respond_to do |format| 
    format.js 
    end 
end 

Và một mẫu gọi là index.js.erb với một số javascript trong đó:

alert("hello world"); 

Firebug trả về phản hồi "văn bản/javascript" có chứa:

alert("hello world"); 

Nhưng cửa sổ cảnh báo không xuất hiện, cũng không xuất hiện ny công việc JavaScript khác. Tôi đã xem qua số http://railscasts.com/episodes/136-jquery Và sau đó, chúng tôi sẽ theo dõi nhiều hơn hoặc ít hơn. Tôi đã thử nhiều thứ khác, như sử dụng .rjs thay vì .erb và đặt này trong mẫu của tôi:

page.alert("hello world"); 

nhưng tôi nhận được kết quả chính xác giống nhau, và trình duyệt không bao giờ thực hiện JS.

Bất kỳ ai biết tại sao JavaScript không được thực thi?

Tôi đang chạy Rails 2.3.4.

+1

Bạn dường như không được sử dụng bất cứ điều gì jQuery cụ thể, nhưng cũng giống như một ghi chú, Rails tàu với Prototype, không jQuery. Kiểm tra jRails nếu bạn muốn chuyển đổi. –

Trả lời

12

Bạn phải gọi nó từ chế độ xem của bạn hoặc nó sẽ không bao giờ được thực hiện.

một bộ điều khiển dụ:

def index 
    @objects = Object.find(:all) 

    respond_to do |format| 
    format.js{ 
     render :text => "alert('hello')" 
    } 
    end 
end 

và một index.html.erb với:

<script type="text/javascript"> 
    $(function(){ 
    $.ajax({ url: '/controller', type: 'get', dataType:'script' }); 
    }); 
</script> 

thay thế '/ điều khiển' với url thực tế mà thực hiện hành động chỉ số của bộ điều khiển đó, theo mặc định cho PostsController nó sẽ là '/ posts' và cứ thế ...

nếu bạn thích rjs bạn xóa {} và everithing trong nó trong bộ điều khiển và tạo một index.js.erb hoặc index.rjs với:

page.alert("hello world") 

hay:

page << "hello world" 
+0

Tôi tình hình của tôi, tôi không có một phiên bản html của hành động này, nghiêm chỉnh của nó cho các trang tải thông qua ajax (pagination vô tận). Vì một số lý do, ngay cả khi tôi gọi hiển thị: text => "alert ('hello');" trong response_to của tôi chặn, tôi vẫn không nhận được cảnh báo, nhưng firebug nói rằng tôi nhận được một phản ứng văn bản/javascript với nội dung chính xác. – a10s

+4

Vâng. hóa ra tôi đã quên dataType: 'script' trong cuộc gọi ajax của tôi. Cảm ơn sự giúp đỡ của bạn, sẽ không tự mình bắt được. – a10s

+0

dataType: 'script' cũng đã lưu tôi khi sử dụng Plugin Biểu mẫu jQuery. Khi bạn đã thiết lập đúng js.erb, nó sẽ không chạy như JavaScript mà không có nó. Cảm ơn! – brokenbeatnik

Các vấn đề liên quan