Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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
Javascript 对控制器操作的jQuery调用不符合预期_Javascript_Jquery_Ruby On Rails_Ruby - Fatal编程技术网

Javascript 对控制器操作的jQuery调用不符合预期

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,似乎是一个文档头,但我不知道是从哪个文

我有以下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