首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Access-Control-Allow-Origin不允许Origin为空。

Access-Control-Allow-Origin不允许Origin为空。
EN

Stack Overflow用户
提问于 2013-03-18 00:45:32
回答 2查看 5.2K关注 0票数 5

当我运行以下代码时:

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>D3 Demo: GeoJSON</title>
        <script type="text/javascript" src="http://localhost/webserver/d3/d3.js"></script>
        <style type="text/css">
            /* No style rules here yet */       
        </style>
    </head>
    <body>
        <script type="text/javascript">

            //Width and height
            var w = 500;
            var h = 300;

            //Define default path generator
            var path = d3.geo.path();

            //Create SVG element
            var svg = d3.select("body")
                        .append("svg")
                        .attr("width", w)
                        .attr("height", h);

            //Load in GeoJSON data
            d3.json("http://localhost/webserver/us-states.json", function(json) {

                //Bind data and create one path per GeoJSON feature
                svg.selectAll("path")
                   .data(json.features)
                   .enter()
                   .append("path")
                   .attr("d", path);

            });

        </script>
    </body>
</html>

我得到以下错误:

代码语言:javascript
运行
复制
XMLHttpRequest cannot load http://localhost/webserver/us-states.json. Origin null is not allowed by Access-Control-Allow-Origin. 

这里出了什么问题,我该如何解决它?我正在关注Scott Murray的书,直到我开始使用json之前,我在我的and服务器上访问文件都没有问题。

EN

回答 2

Stack Overflow用户

发布于 2017-03-22 06:12:19

出于安全原因,浏览器会阻止来自不同主机(源)的Ajax HTTP请求(XHR)。

d3.json("...")函数向您的http://localhost/发出Ajax请求...并且您可能正在从不同的主机提供HTML。

您是否在浏览器中打开.html as文件?这被认为是不同的主机。您在其中有一些选项:

  • 从您提供json文件的同一个web服务器上提供您的HTML文件,
  • 将您的.json转换为.js,在文件中添加类似var mygeodata = {your json here}的内容,并在HTML <head>中添加<script type="text/javascript" src="http://localhost/webserver/us-states.js"></script>,同时删除d3.json("...")部件。在此之后,您的数据在mygeodata
  • Configure web服务器中有一个全局变量,以允许CORS。

如果你正在研究/原型(从外观上看),我会选择第二种方法。

票数 7
EN

Stack Overflow用户

发布于 2019-07-13 23:03:42

来得很晚,但是对于任何仍然有问题的人来说,从包含您想要服务器的所有文件的目录中使用NPM设置一个http-server实例真的很容易。

您只需全局安装http-server npm i http-server -g,然后从根目录运行http-server即可。

服务器运行后,转到浏览器并输入以localhost:[port][/path/to/file]为前缀的相对路径。当您第一次在repo/目录中运行http-server时,Port将从命令行打印出来,并且相对路径从您运行http-server的目录开始。这将正确地为最终用户提供文件,而不只是复制和粘贴指向本地文字的链接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15463364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档