我有以下非常简单的代码,它只读取一个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中有点不同吗?
请注意,该文件作为公共文件在服务器上访问,而不是作为本地文件系统上的文件访问。
答案 0 :(得分: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) ...);
......但这显然会使其在任何其他机器上无法使用。