[英]Rails - Improve handling json response with ajax
我有一个用于页面预览的同步脚本。 preview
功能只是将数据发送到服务器, hookPreview
在单击时将其触发,并且应该在成功时附加响应数据。
window.Wiki =
preview: (raw_data) ->
preview_path = "/wiki/preview"
$.post preview_path,
"raw_data": raw_data,
(data) ->
$("#preview").html data.raw_data
"json"
hookPreview: (tab, textarea) ->
# Send data to controller on click
$(tab).bind "click", ->
res = Wiki.preview $(textarea).val()
console.log(res)
true
$(document).ready ->
Wiki.hookPreview($("#preview-tab"), $(".editor"))
我可以在控制台中检查响应res
:具有回调函数的Object {readyState: 1}
,但无法调用res.status
(控制台中为200)给我“未定义”。
首先,如何解析响应? 其次,我想将脚本改进为异步样式(如此处所述 )。
编辑 :
在控制器中:
def preview
# ...
respond_to do |format|
format.json
end
end
它使用preview.json.erb
:
<%= {:body => @preview }.to_json.html_safe %>
终端中的记录器显示服务器已完成“ 200 OK”,因此问题出在脚本上,而不是在服务器端。
像所有的ajax方法一样, jQuery.post
返回一个promise对象-不是实际的响应。
承诺对象就像一个令牌,在某个时间点将包含响应。
要检查响应,您需要在promise中添加.done
回调:
window.Wiki =
preview: (raw_data) ->
preview_path = "/wiki/preview"
$.post preview_path,
"raw_data": raw_data,
(data) ->
$("#preview").html data.raw_data
"json"
hookPreview: (tab, textarea) ->
# Send data to controller on click
# jQuery.bind is depreciated - use .on instead
$(tab).on "click", ->
promise = Wiki.preview( $(textarea).val() )
promise.done (data) ->
console.log(data)
true
$(document).ready ->
Wiki.hookPreview($("#preview-tab"), $(".editor"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.