Javascript 对控制器操作的jQuery调用不符合预期
我有以下jQuery: 以及routes.rb中的以下条目: 在我的performe\u sync\u controller.rb中: 最初这不起作用-直到我在/views/perforce\u sync中创建了一个空的getPerforce.erb.html文件。。。现在我可以自信地说getPerforce操作肯定被调用了,因为3个put行出现在rails服务器日志中。然而,我原以为alertres:+结果会显示Hi!。。。但是相反,我得到了一堆HTML,似乎是一个文档头,但我不知道是从哪个文件中得到的!:Javascript 对控制器操作的jQuery调用不符合预期,javascript,jquery,ruby-on-rails,ruby,Javascript,Jquery,Ruby On Rails,Ruby,我有以下jQuery: 以及routes.rb中的以下条目: 在我的performe\u sync\u controller.rb中: 最初这不起作用-直到我在/views/perforce\u sync中创建了一个空的getPerforce.erb.html文件。。。现在我可以自信地说getPerforce操作肯定被调用了,因为3个put行出现在rails服务器日志中。然而,我原以为alertres:+结果会显示Hi!。。。但是相反,我得到了一堆HTML,似乎是一个文档头,但我不知道是从哪个文
res: <!DOCTYPE html>
<html>
<head>
<title>Test1</title>
<link data-turbolinks-track="true" href="/assets/application.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/authentication.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/bootstrap.css?body=1" media="all" rel="stylesheet" /> ***... SNIP ... ***
有人能解释一下我的错误吗?我对jQuery有点陌生——但谷歌搜索并没有让我意识到这个问题
谢谢 这是由于rails响应控制器操作的方式。默认情况下,如果在控制器操作中未调用render,则它将在“视图”文件夹中查找模板。这就是它希望您创建getPerforce.erb.html文件的原因 要使其仅返回纯文本,您可以在控制器中写入:
render :text => 'Hi!'
如果您正在做AJAX的事情,那么通常您会希望返回JSON,您也可以在控制器中这样做
render :json => {:data_key => 'A value'}
这是由于rails响应控制器操作的方式。默认情况下,如果在控制器操作中未调用render,则它将在“视图”文件夹中查找模板。这就是它希望您创建getPerforce.erb.html文件的原因 要使其仅返回纯文本,您可以在控制器中写入:
render :text => 'Hi!'
如果您正在做AJAX的事情,那么通常您会希望返回JSON,您也可以在控制器中这样做
render :json => {:data_key => 'A value'}
我认为getPerforce.js.erb输出头的原因是因为服务器已经在用puts命令输出内容 HTML 尽管我不理解官方术语,但您必须记住Rails是一个基于HTTP的框架,这意味着任何输出都必须传输到客户端 因此,如果您要输出文本,则必须对其进行渲染,我猜这是通过Rails HTML渲染引擎完成的 控制器 正如Slicedpan所提到的,我将去掉控制器的任何直接输出 您应该使用以下选项:
#app/controllers/perforce_sync_controller.rb
def getPerforce
respond_to do |format|
format.html { @return = "Called getPerforce" }
format.js { @return = "hi" }
end
end
#app/views/perforce_sync/getPerforce.js.erb
alert("<%=j @return %>");
我认为getPerforce.js.erb输出头的原因是因为服务器已经在用puts命令输出内容 HTML 尽管我不理解官方术语,但您必须记住Rails是一个基于HTTP的框架,这意味着任何输出都必须传输到客户端 因此,如果您要输出文本,则必须对其进行渲染,我猜这是通过Rails HTML渲染引擎完成的 控制器 正如Slicedpan所提到的,我将去掉控制器的任何直接输出 您应该使用以下选项:
#app/controllers/perforce_sync_controller.rb
def getPerforce
respond_to do |format|
format.html { @return = "Called getPerforce" }
format.js { @return = "hi" }
end
end
#app/views/perforce_sync/getPerforce.js.erb
alert("<%=j @return %>");
钉子牢牢地钉在头上!谢谢你,亲爱的钉子牢牢地钉在头上!谢谢你,亲爱的再次感谢Rich。。。正如您和我在我前面的一个问题中提到的,getPerforce操作实际上会转到第三方API并返回一个文件列表。因此,下面返回的实际上只是CSV!很好:def getPerforce result=@@p4object.getRemoteSuites render:json=>result end这是我现在的最后一点评论,再次感谢Rich和SlicedPan最近对我的几个问题的耐心和支持。你们俩让我的Rails技能进步了很多!谢谢没问题!继续问!!:汉克斯又富有了。。。正如您和我在我前面的一个问题中提到的,getPerforce操作实际上会转到第三方API并返回一个文件列表。因此,下面返回的实际上只是CSV!很好:def getPerforce result=@@p4object.getRemoteSuites render:json=>result end这是我现在的最后一点评论,再次感谢Rich和SlicedPan最近对我的几个问题的耐心和支持。你们俩让我的Rails技能进步了很多!谢谢没问题!继续问!!:D