【问题标题】:return json from ruby using rack使用 rack 从 ruby​​ 返回 json
【发布时间】:2015-12-14 14:33:40
【问题描述】:

我对服务器端脚本还很陌生,我在 ruby​​ 上尝试了一下,以便为我写一些小助手并学习一些新东西。

我目前正在尝试编写一个小型 ruby​​ 应用程序,它将特定文件夹中所有图像的 json 文件发送到我的页面,我可以使用这些文件在 js 中进一步处理它们。

我阅读了很多关于 ruby​​ 和 rails 的介绍,并获得了将 rack 作为服务器和应用程序之间的轻量级通信器的建议。

虽然 ruby​​ 部分工作正常,但我很难理解如何发送生成的 JSON 作为对未来 ajax 调用的反应(例如)。希望有人能给我一些提示或资料,以供进一步了解。谢谢!

require 'json'

class listImages
def call(env)
    imageDir = Dir.chdir("./img");
    files = Dir.glob("img*")

    n = 0
    tempHash = {}

    files.each do |i|
      tempHash["img#{n}"] = i
      n += 1
    end

   File.open("temp.json","w") do |f|
     f.write(tempHash.to_json)
   end

  [200,{"Content-Type" => "application/javascript"}, ["temp.json"]] 
   end
   puts "All done!"
end

run listImages.new


if $0 == __FILE__
  require 'rack'
  Rack::Handler::WEBrick.run MyApp.new
end

【问题讨论】:

    标签: ruby json rack


    【解决方案1】:

    您无需将 JSON 保存到文件即可发送。直接发送即可:

    [200, {"Content-Type" => "application/json"}, [tempHash.to_json]]
    

    使用您当前的代码,您只发送字符串"temp.json"

    也就是说,您的其余代码看起来有点混乱/不符合 Ruby 编码标准:

    • 类名以大写开头:class ListImages,而不是 class listImages
    • 变量名使用下划线,而不是驼峰式:image_dir,而不是imageDir
    • puts "All done!" 语句位于方法定义之外,将在加载类时提前调用。
    • 您定义了一个类ListImages,但在代码的最后一行您引用了MyApp

    【讨论】:

      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多