今日使用小程序开发饼图页面,由于一个页面需要打印多个饼图,所以需要将echarts对象进行缓存,于是出现了如下js报错问题

一、 错误代码


VM6541:1 thirdScriptError
Converting circular structure to JSON;at setTimeout callback function
TypeError: Converting circular structure to JSON
at JSON.stringify (<anonymous>)
at e.exports.send (http://127.0.0.1:27264/appservice/__dev__/asdebug.js:1:1950)
at Object.send (http://127.0.0.1:27264/appservice/__dev__/asdebug.js:1:39020)
at Object.n [as publish] (http://127.0.0.1:27264/appservice/__dev__/asdebug.js:1:26961)
at Object.publish (WAService.js:1:120946)
at WAService.js:1:423146
at w (WAService.js:1:423161)
at Object.vdSyncBatch (WAService.js:1:1127858)
at _ (WAService.js:1:1259999)
at Function.<anonymous> (WAService.js:1:1260194)

why、why、why?

看过网上很多相关的错误修复方法,最后都用不上。哎坑!

最终发现是绑定echarts的问题

二、 修改前

1、 错误的report-detail.wxml 页面绑定


<view class="echart_panel">
<ec-canvas ec="{{ecLine}}"></ec-canvas>
</view>
<view class="hr"></view>
<view class="echart_panel">
<ec-canvas ec="{{ecLineSeason}}" ></ec-canvas>
</view>

2、 错误的report-detail.js 数据初始化

import * as echarts from '../../../ec-canvas/echarts';
var getOptionByExternalJs = require('../../../echart-template/echart-option-config.js');
var optionConfig = new getOptionByExternalJs();
Page({ /**
* 页面的初始数据
*/
data: {
contentTxt: '平台通过存量数据导入,异构数据导入、异构系统/平台计入及互联网抓取方式,共汇集空间信息数据',
spaceNum: 23423,
stockNum: 234422,
specialNum: 347458,
internetNum: 89079,
echarts_obj_catch: '', //将数据缓存到data
echarts_obj_season: '',
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
// 接收上一个页面传入的年、季、月
var month = options.month;
var year = options.year;
var season = options.season;
// 将其挂载到data便于页面使用
this.setData({
caption: year + month
}); this.setData({
ecLine: {
onInit: this.initChart_cust('echarts_obj_catch')
}
}); // 初始化echarts ,同时挂载到data
this.setData({
ecLineSeason: {
onInit: this.initChart_cust('echarts_obj_season')
}
}); this.printPie(); // 打印饼图
},
/**
* 打印饼图
*
*/
printPie: function() {
let that = this;
// 初始化echarts ,同时挂载到data wx.showLoading({
title: '数据加载中......',
})
// 此处假设我们使用wx.requiest请求后台获取到了所需数据,重置option
//打印第一个图形 [数据来源]
setTimeout(function() {
that.loadEchartsByBackstage(
that.data.initchartSource,
'数据来源',
'当月月报', [{
value: 9432,
name: '互联网抓取数据'
},
{
value: 24123,
name: '存量导入数据'
},
{
value: 14242,
name: '异构接入数据'
}
]);
//打印第二个图形【数据分类】
that.loadEchartsByBackstage(
that.data.initchartType,
'数据分类',
'当前季度', [{
value: 19432,
name: '春节'
},
{
value: 24123,
name: '秋季'
},
{
value: 14242,
name: '夏季'
},
{
value: 24242,
name: '冬季'
}
]);
wx.hideLoading();
}, 200);
},
/**
* 初始化echats
* @return {Object} echart
*
*/
initChart_cust: function(bindTarget) {
let that = this;
return function(canvas, width, height) {
const echarts_obj = echarts.init(canvas, null, {
width: width,
height: height
});
canvas.setChart(echarts_obj); echarts_obj.setOption(optionConfig);
// 将echarts 挂载到data中;便于wx.reques请求完成重置option
bindTarget === 'echarts_obj_catch' ? that.data.echarts_obj_catch = echarts_obj : that.data.echarts_obj_season = echarts_obj; }
},
/**
* 从服务器获取数据
*
*/
loadEchartsByBackstage: function(echarCasch, title, seriesName, dataArray) {
echarCasch.setOption({
title: {
text: title
},
series: [{
name: seriesName,
data: dataArray
}]
});
}
})

初步推断主要原因是

    this.setData({
ecLine: {
onInit: this.initChart_cust('echarts_obj_catch')
}
}); // 初始化echarts ,同时挂载到data
this.setData({
ecLineSeason: {
onInit: this.initChart_cust('echarts_obj_season')
}
});

这个两个初始化方法的问题。

三、 修改后

1、 report-detail.wxml 页面绑定


<view class="echart_panel">
<ec-canvas id="sorce-pie" canvas-id="source-pie" ec="{{ecLine}}" bind:init="echartInit_source"></ec-canvas>
</view>
<view class="hr"></view>
<view class="echart_panel">
<ec-canvas id="type-pie" canvas-id="type-pie" ec="{{ecLineSeason}}" bind:init="echartInit_type"></ec-canvas>
</view>

2、report-detail.js 数据初始化

import * as echarts from '../../../ec-canvas/echarts';
var getOptionByExternalJs = require('../../../echart-template/echart-option-config.js');
var optionConfig = new getOptionByExternalJs();
Page({ /**
* 页面的初始数据
*/
data: {
contentTxt: '平台通过存量数据导入,异构数据导入、异构系统/平台计入及互联网抓取方式,共汇集空间信息数据',
spaceNum: 23423,
stockNum: 234422,
specialNum: 347458,
internetNum: 89079,
ecLine: {},
ecLineSeason: {}
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
// 接收上一个页面传入的年、季、月
var month = options.month;
var year = options.year;
var season = options.season;
// 将其挂载到data便于页面使用
this.setData({
caption: year + month
});
this.printPie(); // 打印饼图
},
/**
* 打印饼图
*
*/
printPie: function() {
let that = this;
// 初始化echarts ,同时挂载到data wx.showLoading({
title: '数据加载中......',
})
// 此处假设我们使用wx.requiest请求后台获取到了所需数据,重置option
//打印第一个图形 [数据来源]
setTimeout(function() {
that.loadEchartsByBackstage(
that.data.initchartSource,
'数据来源',
'当月月报', [{
value: 9432,
name: '互联网抓取数据'
},
{
value: 24123,
name: '存量导入数据'
},
{
value: 14242,
name: '异构接入数据'
}
]);
//打印第二个图形【数据分类】
that.loadEchartsByBackstage(
that.data.initchartType,
'数据分类',
'当前季度', [{
value: 19432,
name: '春节'
},
{
value: 24123,
name: '秋季'
},
{
value: 14242,
name: '夏季'
},
{
value: 24242,
name: '冬季'
}
]);
wx.hideLoading();
}, 200);
},
/**
* 初始化echats
* @return {Object} echart
*
*/
initChart: function(canvas, width, height) {
const chart = echarts.init(canvas, null, {
width: width,
height: height
});
canvas.setChart(chart);
chart.setOption(optionConfig);
return chart;
},
// 来源
echartInit_source(e) {
this.data.initchartSource = this.initChart(e.detail.canvas, e.detail.width, e.detail.height);
},
//分类
echartInit_type(e) {
this.data.initchartType = this.initChart(e.detail.canvas, e.detail.width, e.detail.height);
},
/**
* 从服务器获取数据
*
*/
loadEchartsByBackstage: function(echarCasch, title, seriesName, dataArray) {
echarCasch.setOption({
title: {
text: title
},
series: [{
name: seriesName,
data: dataArray
}]
});
}
})

哈哈!总算从这个坑中扒出来了

最后附上该案例所需其他文件云盘地址 https://pan.baidu.com/s/1rQotOfPVZcaPcY4HpjyHeg  提取码 yrol

小程序打印饼图报错VM6541:1 thirdScriptError Converting circular structure to JSON;的更多相关文章

  1. Javascript报错Converting circular structure to JSON 错误排解

    在运行nodejs程序的时候报出以下的错误: 2017-11-20 17:44 +08:00: TypeError: Converting circular structure to JSON at ...

  2. 项目中遇到Uncaught TypeError: Converting circular structure to JSON报错问题

    最近公司项目中出现一个报错Uncaught TypeError: Converting circular structure to JSON,,根据上述报错可以知道代码是运行到JSON.stringi ...

  3. 小程序 for循环 报错 Cannot read property 'total' of undefined

    for循环一直报错  Cannot read property 'total' of undefined,但total在起初是有定义的,后来找到了问题,是i<=的问题,改为<不报错了. i ...

  4. 安装odoo小程序商城模块报错 KeyError: u'oejia_weshop'

    错误截图如下 检查模块目录名是否不是 oejia_weshop,比如 oejia_weshop-master,注意odoo的模块名不能随便更改,odoo小程序商城模块目录名必须是oejia_wesho ...

  5. 微信小程序导入Vant报错

    作者:如也_d1c0链接:https://www.jianshu.com/p/0d2332984f8c来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. 先放出来Vant ...

  6. JSON.stringify方法报错:Converting circular structure to JSON

    别以为JSON.parse(JSON.stringify(data))做深拷贝无敌,对于以下这种情况,当你需要保留父级对象,即 对象存在循环引用,就会报错. var a = [ { "id& ...

  7. 小程序调用支付报错:jsapi缺少参数: total_fee

    这种情况通常是因为在调用的时候,package参数有问题导致: wx.requestPayment中package参数必须是package:"prepay_id=wx21********** ...

  8. 微信小程序上传报错:以下文件没有被打包上传: · .gitignore

    简单粗暴的办法就是:找到gitignore文件,把该文件删除掉即可. 在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这 ...

  9. 小程序真机上报错 for developer: some selectors are not allowed in component wxss , including tag name selectors, id selectors, and attribute selectors

    for developer: some selectors are not allowed in component wxss , including tag name selectors, id s ...

  10. 微信小程序开发工具报错对应的服务器证书无效

    提示错误信息:“对应的服务器证书无效.控制台输入 showRequestInfo() 可以获取更详细信息.” 解决方法:详情 -->项目设置 --> 选择“不校验安全域名.TLS版本以及H ...

随机推荐

  1. 用声网 Android UIKit 为实时视频通话应用添加自定义背景丨声网 SDK 教程

    使用声网 SDK 和 UIKit 创建视频推流应用非常简单,而且声网还有许多功能,可以提高视频通话的质量和便利性.例如,我们可以在视频通话过程中使用虚拟背景,为视频通话增添趣味性. 我们可以通过以下三 ...

  2. 命令行启动kate||cmd启动kate|| 一行命令用kate编辑文件

    命令行启动kate||cmd启动kate|| 一行命令用kate编辑文件 先看: 在得知可以在命令行中输入code以启用vscode编辑器后 例 code D:\dLevel\Lenovo\Deskt ...

  3. 剑指 offer 第 3 天

    第 3 天 字符串(简单) 剑指 Offer 05. 替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are h ...

  4. order by是怎么工作的?

    order by是怎么工作的? 在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求.还是以我们前面举例用过的市民表为例,假设你要查询城市是"杭州"的所有人名字 ...

  5. NIM游戏/SG函数

    NIM游戏 先看一下一维 NIM游戏. 有一堆大小为 \(n\) 的石子,甲和乙轮流从石堆里面拿石子,不能一次拿掉所有石子,取走最后一个石子的人获胜,甲先开始,谁是必胜的? 显然,谁先手,谁就获胜.那 ...

  6. 四月二十二日java基础知识

    1.利用接口实现类的多重继承:java语言中接口的主要作用是可以帮助实现类似于类的多重继承功能.多重继承,是指一个子类可以有一个以上的直接父类,该子类可以直接继承它所有父类的非私有成员.2.一个类实现 ...

  7. 600 条最强 Linux 命令总结

    600 条最强 Linux 命令总结 每博一文案 你有千万条微博想写,可有些根本不重要,后来你才懂那是你怕别人看穿你所以才把真话埋在日常里.你有千万句话想说,可点开那 个对话框,你根本打不出一个字.你 ...

  8. Linux进程管理(命令)入门

    进程是一个运行中的程序 进程查看 ps 能够查看当前终端下运行的进程 $ ps PID TTY TIME CMD 26305 pts/0 00:00:00 bash 26312 pts/0 00:00 ...

  9. SpringBoot整合EMQ

    1.引入依赖 <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.ecli ...

  10. cesium源码编译调试及调用全过程

    完整记录一次cesium源码从下载.打包.调用.调试的全过程. 本文使用软件或API版本: VSCode Node:12.18.3 cesium版本:1.94 总体步骤: 下载源码 执行npm ins ...