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

d3 does not support cross-domain request even though after using SimpleHTTPServer

本文关键字:SimpleHTTPServer 不支持 请求 d3      更新时间:2023-09-26

我想从不同于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

注意:-

  1. 试图通过不支持的file:///
  2. Mike提到了SimpleHTTPServer的链接
  3. 还有,我不想编辑我的浏览器设置

我最终运行服务器根"/"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"。在控制台中检查这个应该很容易。

相关文章:
  • 没有找到相关文章