我正在尝试使用javascript从JSON文件中提取元素,但是我收到一条错误消息,说它无法加载JSON文件。
这就是我的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>D3 Tutorial</title>
<script src="http://d3js.org/d3.v3.min.js"> </script>
</head>
<body>
<script>
d3.json("mydata.json", function(data) {
var canvas = d3.select("body").append("svg")
.attr("width", 500)
.attr("height", 500)
canvas.selectAll("rect")
.data(data)
.enter()
.append("rect")
.attr("width", function (d) { return d.age * 10;})
.attr("height", 48)
.attr("y", function (d,i) { return i * 50; })
.attr("fill", "blue");
})
</script>
</body>
</html>
这是控制台吐出的错误:
XMLHttpRequest cannot load file:///C:/locationoffile..../mydata.json. Cross origin requests are only supported for HTTP. d3.v3.min.js:1
Uncaught TypeError: Cannot read property 'length' of null d3.v3.min.js:3
Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101 d3.v3.min.js:1
答案 0 :(得分:4)
d3.json旨在通过HTTP加载数据。正如@Quentin所说,您可以设置本地服务器来通过HTTP提供数据。
对于像这样的开发,我使用firefox,当涉及到本地交叉源请求时,它似乎比chrome更宽松。或者,您可以使用http://tributary.io/
答案 1 :(得分:1)
仅支持HTTP的交叉原始请求。
通过HTTP加载网站。如果需要,安装Web服务器(如Apache HTTPD或Lighttpd)。
答案 2 :(得分:0)
除了安装Web服务器或使用第三方在线环境外,您还可以使用不同的代码编辑器 - 。它提供称为“实时预览”的功能。我只是使用相似的代码点击相同的错误Uncaught XMLHttpRequest
,可以确认代码在Brackets中完美运行。
Brackets可直接与您的浏览器配合使用,立即推送代码编辑,因此您在编码时始终保持最新的浏览器预览 - 无需重新加载页面。为了保持您当前的网页浏览不受影响,Brackets Live Preview会使用单独的Chrome个人资料打开Chrome的其他副本。 //来自Brackets