Echarts问题

Echarts问题

Ajax跨域调用数据的问题,Echarts ajax无法调用到json文件或者数据
1. 报错信息

Access to XMLHttpRequest at ‘file://?callback=success_jsonpCallback&_=1640779886186’ from origin ‘null’ has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https.
在这里插入图片描述

2. 问题分析

这个项目是想利用Echarts做一个中国地图的展示,由于地图中的城市想要完整的展示出来就需要在地图上为每一个城市"打上一个"坐标,如下图
在这里插入图片描述

数据太多就展示一部分。地图的标点数据太多就只能另存为一个json文件然后尝试通过Ajax来请求这些数据,下面是具体的代码

$.ajax({
type: "get",
async: true, 
url: "../data/city_data.json", //请求发送到
dataType: "json", //返回数据形式为json
// jsonp: "callback",
// jsonpCallback:"success_jsonpCallback",
success: function(result) {
    geoCoordMap = result;
    myChart.hideLoading(); //隐藏加载动画
},
error: function(errorMsg) {
	alert("图表请求数据失败!");
	myChart.hideLoading();
},
});

然后点index.html一运行就坏了就出现了上面报错然后没有办法请求到数据,根据报错其实就是同源策略的原因不允许js代码直接访问本地的文件具体什么是同源策略可以自行百度,但是这个在今年6月份的时候还是可以正常运行的真的是很玄学了。

3. 问题的解决

把项目代码放到本地服务器上然后就可以了,我这里采用的是phpstudy还有其他多种开本地服务的方法,因为我本身电脑有phpstudy的环境然后就直接把代码放到WWW的目录下测试访问json数据文件如果可以访问到数据就证明成功了。
在这里插入图片描述在这里插入图片描述

4. 参考

前端读取本地json文件跨域错误(Access to XMLHttpRequest at “.“ from origin ‘null‘ has been blocked by CORS policy)

echarts本地调试调用JSON地图无法显示问题处理

### 常见问题及解决方案 #### 1. **初始化失败** 在 App 环境下,ECharts 可能会因为未正确加载而导致初始化失败。这通常是因为 `renderjs` 或其他渲染机制未能及时完成。 解决方法是确保 ECharts 的脚本文件被正确引入,并通过异步方式等待 DOM 加载完成后才执行初始化逻辑[^4]: ```javascript import * as echarts from 'echarts'; export default { mounted() { this.initChart(); }, methods: { initChart() { const chartDom = document.getElementById('main'); if (chartDom) { const myChart = echarts.init(chartDom); const option = { title: { text: '示例图表' }, tooltip: {}, xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] }, yAxis: { type: 'value' }, series: [{ data: [820, 932, 901, 934, 1290], type: 'line' }] }; myChart.setOption(option); } } } }; ``` --- #### 2. **真机环境下图表不显示** 部分开发者反馈,在 HBuilderX 中预览时图表可以正常显示,但在真机环境中却无法看到任何内容。这是由于某些设备可能对 Webview 渲染存在兼容性问题[^4]。 可以通过以下方式进行优化: - 使用 `<script module="echarts" lang="renderjs">` 来封装 ECharts 的逻辑。 - 添加监听器以检测数据变化并重新绘制图表。 以下是改进后的代码片段: ```html <template> <view> <canvas canvas-id="myCanvas"></canvas> </view> </template> <script module="echarts" lang="renderjs"> onReady((props) => { const { elId } = props; let myChart = null; function init(elId) { const dom = document.getElementById(elId); if (!dom || !window.echarts) return; myChart = window.echarts.init(dom); const option = { title: { text: '动态更新' }, tooltip: {}, xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] }, yAxis: { type: 'value' }, series: [{ data: [820, 932, 901, 934, 1290], type: 'bar' }] }; myChart.setOption(option); } onPropsChange((newProps) => { if (newProps.elId !== elId && newProps.elId) { init(newProps.elId); } }); init(elId); }); </script> <script> export default { data() { return { elId: 'main' // 绑定到某个 ID 上 }; } }; </script> ``` --- #### 3. **性能瓶颈** 在复杂场景中(如大数据量的地图或折线图),可能会出现卡顿现象。这是因为移动设备硬件资源有限,而 ECharts 默认配置并未针对低功耗环境进行优化[^2]。 建议采取以下措施缓解此问题: - 减少不必要的动画效果; - 对于大规模数据集,启用渐进式加载模式; - 调整坐标轴标签密度以降低计算开销。 例如,关闭默认过渡动画可通过设置选项参数实现: ```javascript const option = { animationDurationUpdate: 0, animationEasingUpdate: 'none', ... }; ``` --- #### 4. **地图模块支持不足** 如果尝试将 ECharts 地图功能嵌入 UniApp 应用,则需额外注意地理编码服务的支持情况。虽然可以直接调用百度 API 实现省市级别的交互操作,但如果目标区域涉及海外地址或者自定义矢量图形,则推荐借助第三方 SDK 完善底层能力[^3]。 一种可行方案就是联合高德开放平台提供的 JSAPI 构建混合型视图结构——即保留核心业务逻辑由 Vue 控制的同时,利用原生控件负责地理位置解析与标注管理等工作流环节[^3]。 --- #### 5. **调试困难** 对于初学者而言,最棘手的部分莫过于定位错误来源。特别是在 Android/iOS 平台上运行期间发生的异常往往难以捕捉到具体堆栈信息[^5]。 此时应当充分利用 Chrome DevTools 提供的功能辅助排查;另外也可以考虑安装专门的日志记录工具包以便远程监控线上版本的表现状况[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值