繁体   English   中英

Rails-使用Ajax改进处理json响应

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM