Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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 调用控制器方法并在客户端上获取数据_Javascript_Ruby On Rails_Ruby_Ajax_Json - Fatal编程技术网

Javascript 调用控制器方法并在客户端上获取数据

Javascript 调用控制器方法并在客户端上获取数据,javascript,ruby-on-rails,ruby,ajax,json,Javascript,Ruby On Rails,Ruby,Ajax,Json,我想调用一个服务器端控制器方法,该方法返回一个字符串,最终将是JSON,然后一旦我将数据返回到客户机上,我就可以将其注入视图的一部分,供用户查看 这是我当前的设置: 控制器: class HomeController < ApplicationController def index end def show end def name name = "Sean" respond_to do |format| format.html

我想调用一个服务器端控制器方法,该方法返回一个字符串,最终将是JSON,然后一旦我将数据返回到客户机上,我就可以将其注入视图的一部分,供用户查看

这是我当前的设置:

控制器:

class HomeController < ApplicationController

  def index
  end

  def show
  end

  def name
    name = "Sean"
    respond_to do |format|
      format.html
      format.json {render json: name }
    end
  end
end
AJAX调用:

window.callAPI = () ->
  $.ajax
    type: "GET"
    url: "/home/name"
    success: (data) ->
      console.log data
    error: (error) ->
      console.log error
我得到以下错误:

Started GET "/home/name" for 127.0.0.1 at 2015-01-22 13:28:59 -0700
Processing by HomeController#name as */*
Completed 500 Internal Server Error in 9ms

ActionView::MissingTemplate (Missing template home/name, application/name with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :coffee, :jbuilder]}. Searched in:
  * "/home/sylanz/Documents/NimbusCC/app/views"
):
  app/controllers/home_controller.rb:10:in `name'
您的Ajax调用应该是(注意包含的
dataType
选项):


您应该调用
/home/name.json
——正如错误所说,否则Rails不知道您需要json响应,并选择HTML作为默认响应。而且你没有HTML模板

事实上,如果此操作纯粹是一个API端点,则完全省略
format.html
子句。

jQuery中有一个快捷方式可用。在本例中,它是用请求中缺少的部分替换
ajax
,正如其他人所记录的:
dataType:“json”

你怎么知道的?请注意,在您的日志中:

:formats=>[:html]

这消除了正在发生的错误。但是,我的
console.log(data)
没有启动。编辑:我刚刚添加了一个错误回拨,并且得到了我所期望的结果。状态代码是200,这意味着一切都按计划进行,那么为什么在错误回调中返回而未成功?@seancalahan响应可能是无效的JSON。是的,您的字符串不会呈现为JSON。试试
name={“name”:“Sean”}
$.ajax
  type: "GET"
  url: "/home/name"
  dataType: "json" #Added
  success: (data) ->
    console.log data
:formats=>[:html]