Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何响应Rails中通过AJAX发出的HTML请求_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

Jquery 如何响应Rails中通过AJAX发出的HTML请求

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

我正在尝试编写一个Rails控制器方法,该方法将响应“正常”(例如跟踪链接)和通过ajax发出的get请求

正常情况:控制器应使用布局以完全修饰的HTML响应

Ajax案例:conroller应该使用模板生成的HTML代码段(无布局)进行响应

这是jQuery代码,我创建它是为了在客户端运行以执行get请求

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)