我想调用服务器端控制器方法,该方法返回一个字符串,最终将是JSON,然后一旦我将数据返回到客户端,我就可以将其注入视图的一部分供用户查看。 / p>
这是我目前的设置:
控制器:
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'
答案 0 :(得分:0)
您的Ajax调用应该是(注意包含dataType
选项):
$.ajax
type: "GET"
url: "/home/name"
dataType: "json" #Added
success: (data) ->
console.log data
答案 1 :(得分:0)
你应该调用/home/name.json
- 正如错误所说,否则Rails不知道你想要一个JSON响应,并选择HTML作为默认响应。而且你没有HTML模板。
实际上,如果此操作是纯粹的API端点,请完全省略format.html
子句。
答案 2 :(得分:0)
jQuery中有一个getJSON
快捷方式。在这种情况下,它是ajax
的替代品,其中包含您在请求中缺少的部分,正如其他人所记录的那样:dataType: "json"
。
你怎么能想到这一点?请注意日志:
:formats=>[:html]