我想从不同于d3目录的特定目录加载tsv文件。我的d3脚本驻留在/home/meet/workspace/d3_test/scripts
和SimpleHTTPServer运行在"/"根下。
d3.tsv("http://localhost:8888/home/meet/data/data.tsv",function(error,data){
console.log("fetching data.tsv file "+error+data);
});
抛出错误:
GET http://localhost:8888/home/meet/data/data.tsv 200 OK 5ms (in red color)
fetching data.tsv file [object XMLHttpRequest] undefined
注意:-
- 试图通过不支持的
file:///
- Mike提到了SimpleHTTPServer的链接
- 还有,我不想编辑我的浏览器设置
我最终运行服务器根"/"
与python -m SimpleHTTPServer 8888 &
从localhost访问HTML文件
例如- http://localhost:8888/home/meet/workspace/d3_test/scripts/data_fetch.html
和我的TSV文件在以下位置
http://localhost:8888/home/meet/data/data.tsv
注意:-设置你的SimpleHTTPServer在根"/"
可以帮助你从任何目录获取任何文件在给定的安全成本。
编辑:
不幸的是,SimpleHTTPServer真的很简单,它不允许任何自定义,特别是不允许它发送的标头。然而,你可以自己创建一个简单的HTTP服务器,使用SimpleHTTPServer的大部分,只需添加所需的标头。
只需创建一个文件simple-cors-http-server.py(或其他),并在其中放入以下内容:
#! /usr/bin/env python2
from SimpleHTTPServer import SimpleHTTPRequestHandler
import BaseHTTPServer
class CORSRequestHandler (SimpleHTTPRequestHandler):
def end_headers (self):
self.send_header('Access-Control-Allow-Origin', '*')
SimpleHTTPRequestHandler.end_headers(self)
if __name__ == '__main__':
BaseHTTPServer.test(CORSRequestHandler, BaseHTTPServer.HTTPServer)
然后你可以执行python simple-cors-http-server.py,它将启动你修改过的服务器,它将为每个响应设置CORS头。
似乎没有足够的证据表明这是一个跨域问题。控制台日志应该能够提供更多的细节,但我猜测问题是服务器没有为制表符分隔的值设置正确的mime类型。根据d3.js的tsv
文件的源代码,mime类型应该是"text/tab-separated-values"
。在控制台中检查这个应该很容易。