我正在尝试在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);
答案 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
但是,坦率地说,这种类型的请求对于实验是可以的,但在实际工作中太麻烦了。