Jquery 如何响应Rails中通过AJAX发出的HTML请求
我正在尝试编写一个Rails控制器方法,该方法将响应“正常”(例如跟踪链接)和通过ajax发出的get请求 正常情况:控制器应使用布局以完全修饰的HTML响应 Ajax案例:conroller应该使用模板生成的HTML代码段(无布局)进行响应 这是jQuery代码,我创建它是为了在客户端运行以执行get请求Jquery 如何响应Rails中通过AJAX发出的HTML请求,jquery,ruby-on-rails,ajax,Jquery,Ruby On Rails,Ajax,我正在尝试编写一个Rails控制器方法,该方法将响应“正常”(例如跟踪链接)和通过ajax发出的get请求 正常情况:控制器应使用布局以完全修饰的HTML响应 Ajax案例:conroller应该使用模板生成的HTML代码段(无布局)进行响应 这是jQuery代码,我创建它是为了在客户端运行以执行get请求 jQuery.get("http://mydomain.com/some_controller/some_action", {}, funct
jQuery.get("http://mydomain.com/some_controller/some_action",
{},
function(data, textstatus) {
jQuery("#target").html(data);
},
"html");
在Rails中处理此问题的最佳方法是什么?在控制器中,根据
request.xhr?
动态选择是否使用布局
例如:
class SomeController < ApplicationController
layout :get_layout
protected
def get_layout
request.xhr? ? nil : 'normal_layout'
end
end
class SomeController
在控制器方法中,只需执行以下操作:
respond_to do |format|
format.js if request.xhr?
format.html { redirect_to :action => "index"}
end
如果您使用的是新版本的rails,那么只需将.js附加到路径上,它就会推断请求是一个JavaScript调用另一种方法是注册新格式和URL 将其放入
config/initializers/mime\u types.rb
:
Mime::Type.register_alias 'text/html', :xhtml
将模板保存在some\u controller/some\u action.xhtml.haml
中
并将格式添加到url:
http://mydomain.com/some_controller/some_action.xhtml
,或者最好使用
url_for(:controller => :some_controller, :action => :some_action, :format => :xhtml)
或者更好的路径助手(如果您足够安静):
请记住,这项工作不需要明确的响应
调度
如果您只想为同一个模板切换布局,那么这种技术可能会有点过头,但如果普通版本和ajax版本不同,那么这肯定是一种方法
编辑:
刚刚发布的jQuery 1.5.1提供了在
$.ajax()
中指定mime类型的选项:
mimeType:用于覆盖
XHR mime类型
这可能是URL中显式格式的另一种选择,尽管我还没有尝试过。Ooh-我不知道request.xhr?希望你不介意我编辑我的答案来使用它。在这个问题的上下文中,
format.js
不是最好的选择,因为他想要html。为了让它工作,你的js模板应该生成html,这是一个很容易混淆的解决方案。但是,我不想修改URL,我只想在控制器中使用:respond\u to:xhtml if request.xhr?
。
some_controller_some_action_imaginary_path(:format => :xhtml)