Rails 4控制器没有返回格式良好的JSON

Gab*_*ger 2 ruby jquery json ruby-on-rails coffeescript

我正在使用Rails 4构建一个Web应用程序,我偶然发现了Rails控制器和JQuery之间的一些奇怪的行为,我不确定是不是因为我做错了什么,或者是否真的误解了Rails通过JQuery返回JSON.请参阅以下咖啡脚本:

咖啡脚本:

$.get('/get_experiment', (data) -> 
  console.log 'Success:'
  console.log JSON.parse data
).error (data) ->
  console.log 'Failure:'
  console.log JSON.parse data.responseText
Run Code Online (Sandbox Code Playgroud)

我们只需通过GET调用控制器的方法,处理成功和失败并显示返回的数据.

控制器:

def get_experiment
  respond_to do |format|
    format.js { render json: {} }
  end
end
Run Code Online (Sandbox Code Playgroud)

该控制器简单地回复一个空哈希.


运行此示例时,控制台将显示带有"Failure"文本的空JSON,这显然表明它认为JSON格式不正确.

我不明白为什么空哈希被认为是格式错误的JSON.如果用render json: {foo: 'bar'}它替换它,它仍然会调用error方法.

小智 5

试试这个:

  1. 在您的CoffeeScript文件中使用$.getJSON()而不是$.get()
  2. 同时将路径更改/get_experiment/get_experiment.json
  3. 在您的控制器中使用format.json { ... }而不是format.js

说明

  1. 此步骤不是必需的.但是如果你使用$.getJSON:

    • jQuery发送一个Accept: application/json标题
    • jQuery解释入站响应,将其转换为JavaScript对象,并将其传递给回调(因此您不必混淆eval或其他转换机制).(来自$ .getJSON和$ .get之间的差异)
  2. 如果请求的文档中没有扩展名(如.js,.xml,.json),Rails会假定客户端请求HTML页面.但是,由于您没有format.html在控制器操作中指定,这将导致错误.

  3. 从现在开始请求JSON文档,您需要在控制器操作中指定正确的处理程序.