簡體   English   中英

如何響應在Rails中通過AJAX發出的HTML請求

[英]How to respond to HTML requests made via AJAX in Rails

我正在嘗試編寫一個Rails控制器方法,它將響應獲取請求“正常”(例如,通過鏈接)和通過ajax。

正常情況:控制器應使用布局響應完全裝飾的HTML。

Ajax案例:控制者應該使用模板生成的HTML片段進行響應(無布局)

這是jQuery代碼,我創建了在客戶端運行以執行get請求。

jQuery.get("http://mydomain.com/some_controller/some_action", 
           {}, 
           function(data, textstatus) {
             jQuery("#target").html(data);
           },
           "html");

在Rails中處理這個問題的最佳方法是什么?

在您的控制器中動態選擇是否使用基於request.xhr?的布局request.xhr?

例如:

class SomeController < ApplicationController
  layout :get_layout

  protected

  def get_layout
    request.xhr? ? nil : 'normal_layout'
  end
end

在您的控制器方法中,只需執行此操作:

   respond_to do |format|
      format.js if request.xhr?
      format.html { redirect_to :action => "index"}
    end

另一種方法是注冊新格式並在URL中明確指定

把它放在config/initializers/mime_types.rb

Mime::Type.register_alias 'text/html', :xhtml

將模板保存在some_controller/some_action.xhml.haml

並將格式添加到網址: http://mydomain.com/some_controller/some_action.xhtmlhttp://mydomain.com/some_controller/some_action.xhtml ,或者更好,使用

url_for(:controller => :some_controller, :action => :some_action, :format => :xhtml)

或者,甚至更好的路徑助手(如果你足夠安靜):

some_controller_some_action_imaginary_path(:format => :xhtml)

請注意,這不需要明確的respond_to調度。

如果你想要的只是為同一個模板切換布局,這種技術可能是一種矯枉過正,但如果普通和ajax版本不同,那么它肯定是一種方法。


編輯:
剛發布的jQuery 1.5.1帶來了在$.ajax()指定mime類型的選項:

mimeType :用於覆蓋XHR mime類型的mime類型。

這可能是網址中顯式格式的替代方法,但我還沒有嘗試過。

如果您使用的是新版本的rails,您只需將.js附加到路徑上,它就會推斷該請求是一個JavaScript調用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM