即使在使用SimpleHTTPServer之后,d3也不支持跨域请求

时间:2014-03-21 22:30:02

标签: javascript ajax d3.js simplehttpserver

我想从特定目录加载tsv文件,该目录与d3目录不同。 我的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

注意: -

  1. 尝试传递不受支持的file:///
  2. Mike mentions link使用SimpleHTTPServer
  3. 另外,我不想编辑浏览器设置

2 个答案:

答案 0 :(得分:2)

我最终使用"/"

在根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

注意: - 在root "/"设置SimpleHTTPServer可帮助您以给定的安全成本从任何目录中获取任何文件。

编辑: -

不幸的是,SimpleHTTPServer非常简单,它不允许任何自定义,特别是它不发送的标头。但是,您可以使用大多数SimpleHTTPServer自己创建一个简单的HTTP服务器,只需添加所需的标头。

只需创建一个文件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头。

答案 1 :(得分:0)

似乎没有足够的证据可以断定这是一个跨域问题。控制台日志应该能够提供更多详细信息,但我猜测问题是服务器没有正确设置mime类型以用于制表符分隔值。根据{{​​1}}个tsv文件,mime类型应为"text/tab-separated-values"。应该很容易在控制台中检查这一点。