【问题标题】:d3 does not support cross-domain request even though after using SimpleHTTPServer即使在使用 SimpleHTTPServer 之后,d3 也不支持跨域请求
【发布时间】:2014-04-29 12:31:12
【问题描述】:

我想从不同于 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 mentions link 与 SimpleHTTPServer
  3. 另外,我不想编辑浏览器设置

【问题讨论】:

    标签: javascript ajax d3.js simplehttpserver


    【解决方案1】:

    我最终在根 "/"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 标头。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 当我从同一目录加载时,它已经将 mime 类型设置为“text/tab-separated-values”,并且与 localhost 服务器相同。
      猜你喜欢
      • 2012-01-16
      相关资源
      最近更新 更多