Echarts使用本地JSON文件加载不出图表的解决方法以及Jquery访问本地JSON文件跨域的解决方法

38,504次阅读
没有评论

共计 3435 个字符,预计需要花费 9 分钟才能阅读完成。

前言

  最近需要做一个大屏展示,需要用原生 html5+css+js 来写,所以去学了一下 echarts 的使用。在使用的过程中难免碰到许多 BUG,百度那是必不可少的,可是这些人写的牛头不对马嘴,简直是标题党一大堆,令我作呕,现将我认为比较重要的两个问题记录如下。

一、Echarts 使用本地 JSON 文件加载不出图形的解决方法

  我们在使用 echarts 绘制图表的时候,不可能是将数据写死在代码中的,没有后台的情况下一般是将数据封装在 JSON 中,代码中读取 JSON 文件 来获取数据。

  我使用的是 jquerygetJSON函数来读取本地 json 文件,示例代码如下:

script src="../js/jquery-3.6.4.min.js">/script>
script>
	$.getJSON('../json/test/test.json',function (data) {
	        console.log(data)
	    })
/script>

  数据是能正常获取到的:
Echarts 使用本地 JSON 文件加载不出图表的解决方法以及 Jquery 访问本地 JSON 文件跨域的解决方法

  我们这时候把数据丢进 echarts 中,发现图表显示不出来,但是如果我们把数据写在一个 JS 变量中,图表就能正常显示了,此处不做演示了。

  原因就是 jquery 加载本地 json 文件时是异步加载的,我们需要把 echarts 的代码放在回调函数中,才能正常加载图表,代码如下:

var myChart = echarts.init(document.querySelector('.pie .chart'));

    
    $.getJSON('../json/ 阳朔县 / 阳朔县碳储量.json', function (data) {
        var option = {
            tooltip: {
                trigger: 'item',
                formatter: '{a} 
{b} : {c} ({d}%)'
}, legend: { bottom: '0%', itemWidth: 10, itemHeight: 10, textStyle: { color: "rgba(255,255,255,.5)", fontSize: "12" } }, series: [ { color: ['#5EA6FE', '#45FBF7', '#48FF58', '#EAE809', '#FF7E3F', '#FF4746', '#E177F9', '#4E6BFF', '#ffffff'], name: data.name, type: 'pie', center: ["50%", "34%"], radius: ['35%', '50%'], label: { color: '#fff', fontSize: 12, }, labelLine: { show: true, }, data: data.data } ] }; myChart.setOption(option); }); window.addEventListener("resize", function () { myChart.resize(); });

  此时就能正常显示图表了

二、Jquery 访问本地 JSON 文件跨域的解决方法

2.1 用 webstorm

  我们可以去下载一个 webstorm,直接用该软件的快捷方式打开 html 文件,也不会报跨域问题:
Echarts 使用本地 JSON 文件加载不出图表的解决方法以及 Jquery 访问本地 JSON 文件跨域的解决方法

2.2 其他

  比如用 vscode、hbuilder、修改浏览器配置等等,网上都能找得到对应的办法,这里不做详细说明。这类解决方法的缺点就是,开发人员能访问了,但是用户访问不了,总不能让用户去下载这几个开发软件吧?所以这类办法只能解决开发端的跨域问题,下面介绍几个通用解决方案。

2.3 用 script 标签解决

  这里首先给出第一种方法,可以直接去看这位大佬的文章:https://blog.csdn.net/AiHuanhuan110/article/details/89475333?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-3-89475333-blog-122899037.235^v35^pc_relevant_increate_t0_download_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-3-89475333-blog-122899037.235^v35^pc_relevant_increate_t0_download_v2&utm_relevant_index=6

  这里提个醒,用这种方法的话,json 格式会报错,但是不会影响代码正常运行,用就完事了!!

  还有就是因为是用 script 标签的缘故,所以代码只能写在 html 中,想写在 js 文件中是不行的。

2.4 将 json 文件放在 tomcat 中

  首先到 tomcat 官网下载 tomcat 并解压:
Echarts 使用本地 JSON 文件加载不出图表的解决方法以及 Jquery 访问本地 JSON 文件跨域的解决方法

  得到一个文件夹:
Echarts 使用本地 JSON 文件加载不出图表的解决方法以及 Jquery 访问本地 JSON 文件跨域的解决方法

  我们新建一个站点,打开 webapps 目录,将 ROOT 复制一份,命名随意,我这里就起 test 吧,如图:
Echarts 使用本地 JSON 文件加载不出图表的解决方法以及 Jquery 访问本地 JSON 文件跨域的解决方法

  将里面的文件除了 WEB-INF 之外,全部删除,只留下WEB-INF,如图:
Echarts 使用本地 JSON 文件加载不出图表的解决方法以及 Jquery 访问本地 JSON 文件跨域的解决方法

  我们对文件夹中的 web.xml 进行配置,将下面的语句加到文件中:

filter>
  filter-name>CorsFilterfilter-name>
  filter-class>org.apache.catalina.filters.CorsFilterfilter-class>
  init-param>
    param-name>cors.allowed.originsparam-name>
    param-value>*param-value>
  init-param>
  init-param>
    param-name>cors.allowed.methodsparam-name>
    param-value>GET,POST,HEAD,OPTIONS,PUTparam-value>
  init-param>
  init-param>
    param-name>cors.allowed.headersparam-name>
    param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headersparam-value>
  init-param>
  init-param>
    param-name>cors.exposed.headersparam-name>
    param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentialsparam-value>
  init-param>
  init-param>
    param-name>cors.preflight.maxageparam-name>
    param-value>1000param-value>
  init-param>
filter>
filter-mapping>
  filter-name>CorsFilterfilter-name>
  url-pattern>/*url-pattern>
filter-mapping>

  如图,反正就是丢在 web-app 里面,格式我就不调了:
Echarts 使用本地 JSON 文件加载不出图表的解决方法以及 Jquery 访问本地 JSON 文件跨域的解决方法

  跨域配置好之后,我们直接把 json 文件丢在新建的站点文件夹中,如图:
Echarts 使用本地 JSON 文件加载不出图表的解决方法以及 Jquery 访问本地 JSON 文件跨域的解决方法

  双击 bin 中的 startup.bat 启动服务器,访问默认端口 8080 即可访问到服务器,后面加上站点文件夹名称即可访问到站点文件夹,根据自己的目录结构来访问具体的 json 文件,如果在本机上就是localhost:8080/test/json/xxx.json

(注意:电脑上需要有 java 环境并且配置了环境变量才能启动 tomcat,否则会闪退,具体操作自行百度)

Echarts 使用本地 JSON 文件加载不出图表的解决方法以及 Jquery 访问本地 JSON 文件跨域的解决方法

  如果是在服务器上,就把 localhost 换成服务器的IP 地址,想修改端口的话,就在 conf 目录下的 server.xml 中修改,修改之后需要重新启动:
Echarts 使用本地 JSON 文件加载不出图表的解决方法以及 Jquery 访问本地 JSON 文件跨域的解决方法

  把 jquery 中的 json 文件地址换成服务器中的地址即可解决跨域问题!!!

  不用 tomcat,用其他的服务器比如 nginx、apache 也行,看自己的需要自己选择!!

原文地址: Echarts 使用本地 JSON 文件加载不出图表的解决方法以及 Jquery 访问本地 JSON 文件跨域的解决方法

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-03发表,共计3435字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)