-1

我正在尝试在 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

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

编辑:config/routes.rb:

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

编辑:修复了以下先前的编辑:编辑:当我将 ajax url 更改为“测试”时,我得到:

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);
4

3 回答 3

1

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

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

于 2013-10-13T17:21:53.853 回答
0

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

对于这种情况,您需要直接更改ajaxget以 html 数据类型发送 Ajax 请求。

$.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

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

于 2013-10-13T17:53:53.227 回答
0

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

很可能你需要用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

查看 rails casts 以获得完整的细节 - http://railscasts.com/episodes/136-jquery-ajax-revised

于 2013-10-13T16:56:48.127 回答