我有一个工作代码,其中不需要返回值的AJAX调用工作正常。
Javascript(实际上是coffeescript):
$.ajax({
url: "/images/" + image_id + "/" + action,
type: "GET",
dataType: 'json'
}).done( (response) ->
alert("hello")
)
在服务器端,我有这样的:
respond_to do |format|
format.js {render nothing: true}
end
运行良好
但现在我需要返回一个值,所以我将服务器端更改为:
respond_to do |format|
format.json {render :json => @image.quality}
end
这也执行得很好,服务器端和客户端都没有错误,但"done"回调永远不会执行。
我错过了什么?我搜索了很多文档,但我对自己的发现感到困惑。官方文件http://www.railscook.com/recipes/rails-view-controller-ajax-response-example/比如说用模板渲染js,但我不需要直接渲染javascript,我只需要在客户端有一个值。
阻止它。
问题是JSON格式错误。
出于某种原因
format.json {render :json => @image.quality}
没有生成有效的json,实际上,不是完成的回调,而是错误回调会触发。。。(从我的角度来看,这是一个非常糟糕的做法,一开始就没有包含错误回调)
所以如果我把它改成
format.json {render json: @image}
我得到了有效的json,并且完成了回调。。。