2014-01-08 98 views
6

我刚刚学习d3,并试图从CSV文件中导入数据,但我不断收到错误“XMLHttpRequest无法加载文件:/// Users/Laura/Desktop/SampleECG.csv。只有HTTP支持跨源请求。“我已经搜索了如何解决这个错误,并在本地Web服务器上运行它,但我还没有找到适用于d3.v2.js的解决方案。这里是一个代码示例:无法从d3导入csv文件中的数据

var Time = [] 
    ECG1 = [] 

d3.csv("/Desktop/d3Project/Sample.csv", function(data) 
     { 
     Time = data.map(function(d) {return [+d["Time"]];}); 
     ECG1 = data.map(function(d) {return [+d["ECG1"]];}); 
     console.log(Time) 
     console.log(ECG1) 
     }); 

任何帮助将不胜感激。

+1

您是否正在运行本地网络服务器?见例如[本教程](http://alignedleft.com/tutorials/d3/setup)。 –

+0

您遇到的本地Web服务器有哪些问题? Ajax请求不会与'file:'协议一起工作,因此需要Web服务器(无论是否本地)。理想情况下,将同时服务器的脚本和csv文件。 – nullability

+0

我遇到了同样的问题。检查你是否给了正确的文件路径?并打开file:///,您应该使用本地服务器执行请求。尝试先用firefox打开。因为它处理请求异常。请尽可能提供更多信息(即)您的控制台日志和更多信息。 – divakar

回答

15

这让我很困惑(我也是d3初学者)。

因此,出于某种原因,Web浏览器对于加载本地数据并不满意,可能出于安全原因等等。无论如何,为了解决这个问题,你必须运行一个本地Web服务器。这很容易。

在你的终端,cd后-ing到您的网站的文档根目录(感谢@daixtr),类型:

python -m SimpleHTTPServer 8888 & 

好了,现在只要是终端窗口打开并运行,本地网络8888服务器将会运行。

所以在我的情况下,原来的网页我工作被称为

file://localhost/Users/hills/Desktop/website/visualizing-us-bls-data-inflation-and-prices.html 

当我在Chrome中打开它。要打开我的页面我的本地Web服务器上,我刚才输入(进在Chrome搜索栏):

http://localhost:8888/Desktop/website/visualizing-us-bls-data-inflation-and-prices.html 

现在,阅读的CSV应该工作。奇怪,我知道。

+0

我试过这个,最终在控制台中得到这个错误: XMLHttpRequest无法加载http:// localhost:8888/test.csv。请求的资源上没有“Access-Control-Allow-Origin”标题。因此不允许原产地'null'访问。 你碰到过这个吗? –

+0

与您的评论有相同的问题,只需以'.csv'相同的方式请求html页面,以便它们具有相同的来源。因此,不要在浏览器中从文件中打开'.html',而是在浏览器中请求:'http:// localhost:8888/Desktop/website/mypage.html' –

5

对于那些使用内置python web服务器和仍然遇到问题的人,请记住并确保在您认为是您的DocumentRoot的正确路径上运行“python -m SimpleHTTPServer 8888”调用。也就是说,你不能在任何地方运行'python -m SimpleHTTPServer 8888'。你必须实际'cd/to/correct/path /'包含你的index.html或data.tsv,然后从那里运行'python -m SimpleHTTPServer 8888'。

+0

这是一个很好的观点。我将它添加到主要答案,以便人们看到。 –

0

使用Firefox,idk Chrome试图完成什么