2010-04-29 35 views
8

Tôi đang tạo ứng dụng mới có 3.0.0.beta3. Tôi chỉ đơn giản là cố gắng để làm cho một mẫu js.erb đến một yêu cầu Ajax cho các hành động sau đây (trong publications_controller.rb):Rails3 hiển thị mẫu js.erb với loại nội dung văn bản/html thay vì văn bản/javascript

def get_pubmed_data 
    entry = Bio::PubMed.query(params[:pmid])# searches PubMed and get entry 
    @publication = Bio::MEDLINE.new(entry) # creates Bio::MEDLINE object from entry text 
    flash[:warning] = "No publication found."if @publication.title.blank? and @publication.authors.blank? and @publication.journal.blank?  
    respond_to do |format| 
     format.js 
    end 
end 

Hiện nay, mẫu get_pubmed_data.js.erb của tôi chỉ đơn giản là

alert('<%= @publication.title %>') 

các máy chủ đang phản hồi bằng sau

alert('Evidence for a herpes simplex virus-specific factor controlling the transcription of deoxypyrimidine kinase.') 

đó là hoàn toàn tốt đẹp ngoại trừ việc không có gì xảy ra trong trình duyệt, có lẽ vì content-type của phản ứng là 'text/html' inst ead của 'văn bản/javascript' như được hiển thị bởi tiêu đề phản hồi được sao chép một phần tại đây:

Status 200 
Keep-Alive timeout=5, max=100 
Connection Keep-Alive 
Transfer-Encoding chunked 
Content-Type text/html; charset=utf-8 

Đây có phải là lỗi hoặc tôi thiếu gì đó không? Cảm ơn bạn đã giúp đỡ!

+0

Làm thế nào để bạn gọi 'get_pubmed_data'? Trong Rails 3 bạn phải làm: '<% = link_to 'Bấm vào đây',: controller =>: publications,: action =>: get_pubmed_data,: remote => true%>' – Mischa

+0

Cuộc gọi đến get_pubmed_data là tốt, được thực hiện thông qua một hàm javascript observ_field, với đúng '-Yêu cầu-Với \t XMLHttpRequest'yquest Headers – Yannis

Trả lời

9

cuối cùng tôi đã có thể để có được những content-type ngay trong phản ứng bằng cách buộc nó với:

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

đã có một vấn đề tương tự mà tập tin js sẽ nạp như một tập tin văn bản, nhưng cuối cùng nó chỉ là những sự rà soát của tôi đang tải sai trật tự.

thay

<%= javascript_include_tag :all %> 

với

<%= javascript_include_tag "jquery.min" %> 
<%= javascript_include_tag "jquery-ui.min" %> 
<%= javascript_include_tag "rails" %> 

Cũng cần lưu ý, phương pháp getscript

tức là thay thế:

onClick="<%= get_pubmed_data_path(:format => :js) %>" 

với:

onClick="$.getScript('<%= escape_javascript(get_pubmed_data_path(:format => :js)) %>');" 
+0

Tuyệt vời, tôi sẽ cố gắng rằng ngày mai ở vị trí đầu tiên… – Yannis

+0

Vâng, nó không hoạt động. Vẫn nhận được mẫu js.erb của tôi được nhúng trong bố cục. – Yannis

+0

điều duy nhất tôi có thể thấy là bạn có thể muốn nâng cấp đường ray (giả sử bạn vẫn đang sử dụng beta3). Với Rails 3.0.0 nó làm việc cho tôi. Chúc may mắn! – montrealmike

1

Với Rails 3.1.1 Tôi đã gặp sự cố tương tự. Câu trả lời của tôi sẽ hiển thị dưới dạng html mặc dù tôi đã đề cập rõ ràng định dạng.js trong bộ điều khiển của mình. Nó chỉ ra vấn đề là tôi đã có jquery.js tập tin trong tài sản của tôi và được nạp bởi các mẫu. jquery-rails sử dụng bản sao jquery của riêng nó và có các tệp này cũng được tải gây ra đường ray để hiển thị phản hồi dưới dạng html vì một lý do nào đó. Có thể giúp người khác bị mắc kẹt với vấn đề này.

+0

làm cách nào bạn kết thúc việc sửa lỗi này? Tôi đã có cùng một vấn đề và không có vấn đề gì để tôi tải nó, một cái gì đó bị hỏng. – prater

0

Tôi đã gặp vấn đề tương tự và hóa ra tôi đã tạo một phương thức gọi là content_type trên bộ điều khiển của tôi đã ghi đè mặc định.

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