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

Call controller method and get data back on client

本文关键字:获取 数据 客户端 控制器 方法 调用      更新时间:2023-09-26

我想调用一个返回字符串的服务器端控制器方法,该方法最终将是 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

路线:

  resources :home do 
    collection do
      get 'name'
    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'

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

实际上,如果此操作是纯粹的 API 终结点,则完全省略 format.html 子句。

你的 Ajax 调用应该是(注意包含的dataType选项):

$.ajax
  type: "GET"
  url: "/home/name"
  dataType: "json" #Added
  success: (data) ->
    console.log data

jQuery中有一个getJSON快捷方式。在这种情况下,它是ajax的直接替代品,其中包含您在请求中缺少的部分,如其他人所记录的那样:dataType: "json" .

你怎么会想通的?在日志中注意:

:formats=>[:html]