0

我有以下非常简单的代码,它只读取一个 JSON 文件:

<html>
<head>
<meta charset="ISO-8859-1">
<title>JSON Test</title>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script>
$(function()
{
    alert (1);
    $.getJSON('data/sample.json', function(json) 
    {
        alert(2);

    });
});
</script>
</head>
<body>
    <div id="datadiv">This is the info:  </div>
</body>
</html>

我将上述文件加载到 Tomcat 服务器上,并且可以使用以下命令加载文件: http://myserver.com:8080/Html5_Test_1/jsonTest.html. 上面的代码有效,并且调用了 alert(2)。但是,如果我将用于 getJSON 的路径更改为 /Html5_Test_1/data/sample.json,它将不起作用。

我认为 /Html5_Test_1/data/sample.json 是 data/sample.json 的绝对路径,应该可以工作。事实上,我已经尝试过 /data/sample.json、Html5_Test_1/data/sample.json,但都没有。唯一有效的路径是 data/sample.json。

谁能告诉我出了什么问题?绝对路径 /Html5_Test_1/data/sample.json 在 Java 中肯定可以工作。那么,JavaScript 中绝对路径和相对路径的概念是不是有点不同呢?

请注意,该文件是作为服务器上的公共文件访问的,而不是作为本地文件系统上的文件访问的。

4

1 回答 1

1

您似乎混合了绝对/相对文件系统路径和绝对/相对 URL。请记住,JavaScript 是客户端语言,它与托管其母版页的服务器的文件系统无关。所以你宁愿提供一个相对 URL,考虑到它的起点很可能是服务文件的路径。

但你可能会问,为什么它现在有效?检查这个:

/Html5_Test_1/
.. data/
.... sample.json
.. jsonTest.html

...请记住,URL 将被视为与包含jsonTest.html文件的目录相关。很容易看出为什么正确的相对路径是data/sample.json(或'./data/sample.json')。

如果你愿意,你可以把你的代码改成这样……

$.getJSON('file:///Html5_Test_1/data/sample.json', function(json) ...);

...但这显然会使它无法在除您的机器之外的任何其他机器上使用。

于 2013-06-03T13:34:36.793 回答