Ruby on Rails和Ajax

时间:2013-10-13 16:42:42

标签: ruby-on-rails ajax

我正在尝试在rails和ajax上学习ruby。我主要完成了本教程:http://ruby.railstutorial.org/ 而这:http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html

现在我正在尝试让最基本的东西工作,所以我有一个基础可以建立。我想在页面加载后动态加载内容。 我有一个页面,其中包含以下代码(app / views / statc_pages / home):

<h1>StaticPages#home</h1>
<p>Find me in app/views/static_pages/home.html.erb</p>
<div name="results" id="results" class="results"></div>

我在app / assets / javascript / static_pages.js.coffee中有一个文件:

$(document).ready ->
  $.ajax(url: "/static_pages/test").done (html) ->  $('#results').append html

我在app / views / static_pages /中有两个文件,它们是test.js.erb和test.hmtl.erb,内容相同。但它没有被添加到/ home。 我的静态页面控制器只有:

class StaticPagesController < ApplicationController
  def home
  end
  def test
  end
end

到目前为止只显示主页。 coffeescript被执行但是/ test的内容不会被插入。我不确定ajax代码是否被执行。

编辑:config / routes.rb:

AjaxTest::Application.routes.draw do
  get "static_pages/home"
  get "static_pages/test"

编辑:修复了以下上一个编辑: 编辑:当我将ajax url更改为“test”时,我得到:

Missing template static_pages/test, application/test with {:locale=>[:en], :formats=>[:js, :html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "/home/xyious/Programming/AjaxTest/app/views"

编辑:现在chrome说static_pages.js包含以下内容:

(function() {
  $(document).ready(function() {
    return $.ajax({
      url: "test"
    }).done(function(html) {
      return $('#results').append(html);
    });
  });

}).call(this);

3 个答案:

答案 0 :(得分:1)

您似乎缺少StaticPages#test操作的模板(查看文件)。

将名为test.js.erb的文件添加到views/static_pages目录。

答案 1 :(得分:0)

您使用firebug javascript控制台(或chrome dev工具等)进行调试吗? ajax请求执行到/statis_pages/test吗?并在请求发生后尝试在javascript中记录html变量

您很可能需要使用js格式进行回复

class StaticPagesController < ApplicationController
  def home
  end

  def test
    respond_to do |format|        
      format.js # should render app/views/static_pages/test.js.erb
    end
  end
end

结帐铁杆演员以获取完整详情 - http://railscasts.com/episodes/136-jquery-ajax-revised

答案 2 :(得分:0)

jQuery的ajax的默认数据类型是script。所以基本上你是向服务器发送一个js请求,要求一些html响应。

对于这种情况,您需要直接将ajax更改为get,以将Ajax请求作为html dataType发送。

$.get(url: "/static_pages/test").done (html) ->  $('#results').append html

然后在控制器中,您需要设置不为ajax请求呈现布局。

def test
  if request.xhr?
     render 'test', layout: false
     return
  else
     # blah blah
  end
end

但是,坦率地说,这种类型的请求对于实验是可以的,但在实际工作中太麻烦了。