今日使用小程序开发饼图页面,由于一个页面需要打印多个饼图,所以需要将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. vue 和 react 的区别有哪些

    vue 和 react 有什么区别呢?下面从这 4 个角度来说一说! (1)从编程范式的角度讲 在 vue-loader.vue-template-compiler 的支持下,vue 可以采用 SFC ...

  2. C# 通过StreamWriter输出的TXT流文件,前缀带EF BB BF

    好久没有动笔写博客了,这个小天地被我闲置的放了好久好久,接下来要慢慢捡起来了. 备注:通过C#的StreamWriter类输出一个TXT流文件,供下位机工程师使用,发现打开的16进制文件中,默认添加了 ...

  3. win10_Dock安装设置

    1.安装:(在win10上安装) 桌面版:https://www.docker.com/products/docker-desktop, 安装后重启电脑 2.配置 打开DockerDesktop,(可 ...

  4. selenuim文件的下载

    文件下载:谷歌浏览器则会自动实现下载,不会弹出框提示,会直接下载谷歌的默认路径:火狐浏览器下载会弹出提示框,此时火狐需要添加浏览器的配置参数信息: 火狐的相关浏览器配置参数可以通过about:conf ...

  5. easy-excel读取远程地址获得文件进行上传

    背景 作为一个快五年的程序员,一直以来还没有自己维护过自己的技术栈,最近也是有时间,所以也是下定决心,从头开始,一步一步的夯基础.最近在系统化的学习easy-excel,今天遇到了一个问题,特意记录一 ...

  6. 干掉复杂的工具类,国产Java工具类库 Hutool 很香!

    Hutool 大家已经比较熟悉了,这是一个超全的 Java 工具库,深受国内开发者的喜爱. 我之前其实是不太喜欢使用这种功能太多的工具类的,也比较担心稳定性和安全性,后面慢慢接受了就感觉其实也还好.而 ...

  7. flak_login用法

    基础的信息和全局配置这里就不多说,需要用到再斟酌也可以的.这里也是针对每个模块较为常用的进行解释说明,后期再使用过程中遇到会进行补充. Login_Manager LoginManager是一个类,有 ...

  8. day06-SpringCloud Ribbon

    SpringCloud Ribbon 1.Ribbon介绍 1.1Ribbon是什么? 官网地址:Netflix/ribbon: Ribbon(github.com) SpringCloud Ribb ...

  9. SLBR通过自校准的定位和背景细化来去除可见的水印

    一.简要介绍   本文简要介绍了论文"Visible Watermark Removal via Self-calibrated Localization and Background Re ...

  10. phpcm v9 任意调用分页/phpcm v9首页调用分页不起作用或者乱码

    默认如下: {pc:content action="lists" catid="1" num="10" order="id DES ...