【问题标题】:reading json data from a file从文件中读取 json 数据
【发布时间】:2011-06-26 10:57:06
【问题描述】:

我正在使用 Go 编程语言运行服务器,当我在浏览器中加载服务器时,会调用 temp 处理程序函数,并且 getjson.html 文件由该 temp Handler 函数提供服务。现在屏幕显示“获取 Json 数据”按钮。单击此按钮后,我没有得到任何结果(因为应该在屏幕上显示某些内容)。

我检查了 javascript 控制台,没有任何错误。 我无法弄清楚问题是什么,为什么屏幕上没有任何输出。

servejson.go 的内容:

package main

import (
    "http"
    "flag"
)

var path = flag.String("root", "/home/chinmay/work/json/getjson.html", "Set root directory, use absolute path")

func temp(w http.ResponseWriter, r *http.Request){
    w.Header().Set("Content-Type", "text/html")
    http.ServeFile(w,r,*path)
}

func main(){
    http.HandleFunc("/",temp)
    http.ListenAndServe(":8080", nil)
}

getjson.html 的内容:

package main

import (
    "http"
    "flag"
)

var path = flag.String("root", "/home/chinmay/work/json/getjson.html", "Set root directory, use absolute path")

func temp(w http.ResponseWriter, r *http.Request){
    w.Header().Set("Content-Type", "text/html")
    http.ServeFile(w,r,*path)
}

func main(){
    http.HandleFunc("/",temp)
    http.ListenAndServe(":8080", nil)
}

json_data.js 的内容:

{ 
  "firstName": "John",
  "lastName": "Doe",
  "age": 25
}

【问题讨论】:

  • 是的,这应该是可能的 - getJSON() 应该这样做,即使文本文件的内容类型是 text/plain。我不完全确定,但为什么不简单地尝试一下?
  • 您是否尝试从本地机器读取文本文件?我不相信这在 js 中是可能的
  • 实际上我正在运行一个服务器,然后我会提供这个包含 js 脚本的 html 文件,然后它会尝试访问 file.txt 以获取 json 数据并将其打印到屏幕上。跨度>
  • @chinmay:没关系,前提是json.txt 可以通过 HTTP 访问并且(使用您提供的路径)是运行此代码的文档的对等点(例如,http://example.com/page.html和http://example.com/json.txt)。
  • 你能告诉我为什么我上面给出的代码没有运行吗,它遵循你所说的!但是,正如您在示例中向我展示的那样,我无法获得任何输出。您没有访问文件,而我正在尝试访问 json.txt 文件,您能以这个角度向您展示示例吗?

标签: javascript json go


【解决方案1】:

是的,你可以。 Live example. 前提是 json.txt 是运行此代码的文档旁边的资源,并且(在某些浏览器上)如果它不是从本地文件运行的(例如,file:// URL 而不是 @987654326 @ one;有些浏览器可以通过 ajax 访问其他本地文件的本地文件,而其他浏览器则不行。

几点说明:

  • 在

    $("div").append(field + " ");
    

    line, field 将是每个属性的值(例如,“John”)。

  • 属性的列出顺序完全未定义。

所以对于这个具体的例子,你可能会更好

<script type="text/javascript">
$(document).ready(function(){
  $("button").click(function(){
    $.getJSON("json.txt",function(result){
      $("div").append(result.firstName + " " + result.lastName + " " + result.age);
    });
  });
});
</script>

Live example


更新:从您的 cmets 的另一个答案来看,您似乎不清楚脚本代码在何处以及如何运行。 JavaScript 脚本在客户端的浏览器上运行。用于引用json.txt 的路径与(比如说)要在页面上显示的图像的路径完全相同。 json.txt 必须可通过 Web 服务器访问,就像图像需要可通过 Web 服务器访问一样。将json.txt 视为您的网页使用的另一个资源,就像其他任何资源一样。就路径以及如何使json.txt 可用而言,适用相同的规则。需要明确的是:在网页中运行客户端的脚本无法访问浏览器无法检索的服务器端文件。


更新 2:您发布了更多代码,并且您的服务器看起来只为getjson.html 文件提供服务。您的服务器也必须提供 json.txt 文件,否则浏览器无法访问它。

【讨论】:

  • @chinmay:这基本上就是我对实时链接所做的。我不明白你为什么想看它......?
  • 我想看看它,因为代码正在处理 .html 部分中的文件“demo_ajax_json.js”,这正是我想做的。我正在尝试使用我在上面给出的代码的 go 服务器来做到这一点。它基本上服务于 .html 文件,然后这个 .html 文件尝试执行示例中所做的操作。但是,我无法获得预期的输出。我在这里错在哪里?代码中文件的路径是否正确? .html 文件正在提供,但是当我按下 getJSONdata 按钮时没有任何反应,没有打印任何内容:(
  • @chinmay:我已经讨论了路径和上面的要求。
  • 我完全按照你说的做了。请检查我上面的代码,我已经编辑了问题。我非常需要一些关于为什么代码不起作用的指导,即当我按下 getjsonbutton (.html 文件)时,我没有得到任何输出。我已经被困在这里几个小时了。拜托我需要你的帮忙。帮助..
【解决方案2】:

对不起,如果这与 Go 无关,但我在 JQuery 中搜索类似问题的解决方案时在这里失败了,并且该解决方案与使用的工具无关。

我今天遇到了一个问题,在没有数据库的情况下在链接到数据库的程序上模拟 Json 查询。所以我将一个 Json 结果保存到一个文件中,并想用它来代替。 json.txt 文件位于服务器上,可在浏览器中查看,但 $.getJSON 出现错误。

要解决这个问题,我所要做的就是用“html”扩展名重命名文件,比如json.html,并删除文件中的标题。即,您不需要在文本文件的开头包含“Content-Type: application/json”。

可能特定于 Web 服务器 (Apache) 或浏览器安全 (Firefox),但至少它有效。

【讨论】:

    【解决方案3】:

    $.getJSON() 需要一个 URL 作为参数。您正在尝试从本地机器/服务器的目录结构中访问一个文件,这在 JS 中是不可能的。

    查看 jquery 文档http://api.jquery.com/jQuery.getJSON/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2014-10-15
      • 1970-01-01
      相关资源
      最近更新 更多