d3.csv()读取本地文件失败_报错Access to XMLHttpRequest at ‘file:‘ from origin ‘null‘ has been blocked_替换和解决方法_from origin 'null' has been blocked by cors policy-程序员宅基地

技术标签: 前端开发  d3.js  html  javascript  

背景介绍

最近在做一个数据可视化系统,对csv文件中数据进行处理后,以统计图表的形式实现可视化,使用的技术有JavaScript、D3、HTML,代码中有csv、js、html三个文件夹。
由于D3提供了csv文件读取函数——d3.csv(),本想在js文件中直接使用,但在本地直接运行html文件的时候报出以下两个错误:

Access to XMLHttpRequest at ‘file://’ from origin ‘null’ has been
blocked by CORS policy: Cross origin requests are only supported for
protocol schemes: http, data, chrome-extension, edge, https,
chrome-untrusted.

Failed to load resource: net::ERR_FAILED

分析

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing),它允许浏览器向跨源服务器发出XMLHttpRequest请求。
由于CORS不支持file协议方案,所以前端跨域失败,导致加载csv文件内容失败,因而报错;也有说法是因为安全机制禁止了CORS,不允许直接读取本地文件。
解决方法为避免无效跨域。

解决方法:

一、安装Live Server插件

在Visual Studio Code环境下安装Live Server插件,右键单击html文件,选择Open With Live Server运行。
该插件可以强制使文件处在同一个服务器下,避免出现跨域。如图所示:
安装插件
执行html文件

二、安装npm

安装npm,设置一个webserver来server我们的数据。
参考链接:
D3.js加载csv数据https://www.cnblogs.com/shuaiwang/p/4608378.html
npm安装教程https://www.cnblogs.com/lgx5/p/10732016.html

三、使用input标签

使用HTML的input标签导入csv文件,通过loadData.js对文件进行处理后再传递给其他js文件。
流程为:读取文件夹内的所有文件;将csv文件转为数组形式;声明一个数组保存所有文件内容;使用数据。
html文件部分代码如下:

<div>
     <input type="file" id="readCsvFile" onchange="fileImport()"
            style="position: absolute;left: 46%;top:54%;width:200px;" 
            webkitdirectory/>
			<!--webkitdirectory实现文件夹上传-->
</div>

loadData.js文件代码如下:

//存储由csv文件转变成的数组
filesData=[];
function fileImport() {
    
    //获取读取本地文件的File对象
    var selectedFiles = document.getElementById('readCsvFile').files;//把document.getElementById('file')看成是Dom对象.
    for (var file of selectedFiles) {
    
        var reader = new FileReader();  //这是核心,读取操作由它完成.
        reader.readAsText(file);        //读取文件的内容
        reader.onload = function () {
    
            //当读取完成后回调这个函数,然后此时文件的内容存储到了result中,直接操作即可
            //将csv内容由文本形式转为数组形式;需要确保csv文件最后一行不为空。
            var lines = this.result.split('\r\n');
            var titles = lines[0].split(",");
            var data = new Array(lines.length - 1);

            for (var i = 1; i < lines.length; i++) {
    
                data[i - 1] = {
    };
                lines[i] = lines[i].split(",");
                for (var j = 0; j < titles.length; j++) {
    
                    data[i - 1][titles[j]] = lines[i][j];
                }
            }
            //data为处理后的数组
            filesData.push(data);
            //console.log(filesData);
            //使用csv文件的数据
            if (filesData.length >= 3) {
    
                useRadarData(filesData[1]);//有时要注意数据使用顺序
                useMatrixData(filesData[2]);
                useBarChartData(filesData[0]);
            }
        }
    }//for,selectedFiles
}

以上。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44576593/article/details/117842849

智能推荐

Freemark 例子-程序员宅基地

文章浏览阅读1.1k次。最近在学习SSH+Freemark+Jquery搭建网上商城的例子,分享下学习Freemark的例子吧!科普知识 大牛可以忽略 给初学者看看的。 创建如下类package freemark;import java.io.File; import java.io.OutputSt

openssl 交叉编译_openssl交叉编译-程序员宅基地

文章浏览阅读1w次,点赞5次,收藏33次。交叉编译openssl需要交叉编译aarch64版本的openssl,需要在第一个参数位置指定目标架构,–cross-compile-prefix指定了命令前缀,当然这些命令的路径需要在PATH中设置。 ./Configure linux-aarch64 --cross-compile-prefix=aarch64-himix100-linux- --prefix=/data/sqhao/work/openssl_instasll && make && make inst_openssl交叉编译

基于接收信号强度(RSS)的室内定位/无线传感器网络定位——极大似然估计ML/最小二乘估计WLS_rss定位特点-程序员宅基地

文章浏览阅读4.8k次,点赞14次,收藏52次。基于接收信号强度(RSS)的室内定位/无线传感器网络定位——极大似然估计ML/最小二乘估计WLSRSS室内定位极大似然估计ML室内定位加权最小二乘WLS室内定位_rss定位特点

卡诺模型案例分析_AMOS案例分析 | 结构方程模型(二)-程序员宅基地

文章浏览阅读5.3k次。使用结构方程的方法进行模型的验证1、 替换缺失值在读取数据文件之前,对数据的完整性问题做适当处理。利用SPSS进行数据缺失值的处理。操作过程:转换→替换缺失值输出结果:形成新的数据集。从下表中可以看出,LXRZ1_1和GXRZ4_1有缺失值。从新的数据集中看出两个缺失值替补均为4。结果变量结果变量替换的缺失值数非缺失值的个案编号有效个案数创建函数第一个最后一个1LXRZ1_1111691..._spss卡诺模型

我认为最舒服的QT点击按钮(QPushButton)触发事件语句!_pushbutton::clicked, q_func()-程序员宅基地

文章浏览阅读5.1k次,点赞3次,收藏19次。connect(button,&QPushButton::clicked,[=](){emit func();});其中button就是需要点击的那个QPushButton按钮,func()就是要触发的函数,比起SIGNAL-SLOT写法的优点在于,任何一个之前写的函数都可以当作被触发的对象,不需要改成SLOT。..._pushbutton::clicked, q_func()

JavaScript,大有前景的编程语言_javascript是最有前景的语言-程序员宅基地

文章浏览阅读1.2k次。原文:JavaScript-A First-Class Language At Last 作者:Tom Goldenberg 译者:LeviDing 声明:转载请联系本人,并注明出处。2003年,保罗·格雷厄姆(Paul Graham)在他的一篇文章中提到,他的公司决定使用 Lisp (一门编程语言)。在文章中他将 Lisp 描绘成计算机语言界的法语,它独特、深邃,能够表达出难以_javascript是最有前景的语言

随便推点

MT6261芯片设计最新参考资料分享_mt6261ma-程序员宅基地

文章浏览阅读2.4k次。MT6261 design noteChange listDesign NoticeV0.2 to V0.3-修改GPRS射频部分。为不同的PA添加2层设计通知添加RX匹配布局指南MT6261 RFMD 7198设计说明。-增加USB部分。添加usb-if测试项-修改音频和语音部分。加入K类及AB类共同布局设计通知书-增加SFI/EMI部分。增加用于pSRAM的VIO 18..._mt6261ma

The 2022 ICPC Asia Regionals Online Contest (I)-D题题解(DFS暴搜+剪枝+打表去重+二分)_杭州2022icpc题解-程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏3次。这次比赛很好,题也很好,就是下午人不太清醒,没做出来太菜了,回去才写出来的。_杭州2022icpc题解

【二中OJ】1100 【p-NOIP-2004-1】不高兴的津津-程序员宅基地

文章浏览阅读41次。由于网站设计原因,无法直接跳转题目,需要自己点击【所有试题】——【试题ID】——输入本题题号并点击【开始查询】

【halcon深度学习】dev_display_dl_data 移植到C# 上篇_halcon c# dev_display_dl_data-程序员宅基地

文章浏览阅读403次。在研究halcon深度学习的时候,会发现halcon的例程里面用到了大量的二次封装库函数。这些库函数内部也是由基础的算子组成。我们在halcon的开发环境里面用的很爽,但是一旦要在C#中使用,就会报错。一开始,我想避开这个移植过程,直接使用halcon引擎(HDevEngine )的方式。其实, halcon引擎(HDevEngine ) 不提供内部显示运算符的实现,而是提供类HDevOperatorImplCpp,其中包含所有您可以自己实现的运算符的空虚拟方法。_halcon c# dev_display_dl_data

jacob 报错 Can't co-create object-程序员宅基地

文章浏览阅读1.8k次。问题:开始时一切正常,后来什么都没该,出现Can't co-create object报错,即是创建不了ActiveXComponent wd=new ActiveXComponent("Word.Application");偶尔发现任务管理器中word进程居然达到10个,而我没有打开word就关闭一个进程再运行又可以打印了,进程也多一条,然后再一次运行系统执行打印又报错了。这说明..._jacob can't co-create object

爬虫入门:了解Web爬虫的基本知识-程序员宅基地

文章浏览阅读1.1k次。Web爬虫是一种自动化程序,可以模拟人类浏览器的操作,从互联网上抓取数据。爬虫在很多领域中都发挥重要的作用,如搜索引擎、数据分析和监测等。本文将介绍一些关于爬虫的基本知识点,以帮助初学者入门。本文介绍了爬虫的基本知识点,包括原理、常用库和框架、道德规范、挑战以及学习资源。通过深入学习和实践,你将能够掌握更多关于爬虫的技术,开发出高效和可靠的爬虫应用程序。希望这些知识对你的爬虫学习之旅有所帮助!

推荐文章

热门文章

相关标签