微信小程序JS报错:Uncaught TypeError: Converting circular structure to JSON

今天开发微信小程序调用setData时遇到一个JSON.stringify转换一个循环引用结构的报错。

setData工作原理
小程序的视图层目前使用 WebView 作为渲染载体,而逻辑层是由独立的 JavascriptCore 作为运行环境。在架构上,WebView 和 JavascriptCore 都是独立的模块,并不具备数据直接共享的通道。当前,视图层和逻辑层的数据传输,实际上通过两边提供的 evaluateJavascript 所实现。即用户传输的数据,需要将其转换为字符串形式传递,同时把转换后的数据内容拼接成一份 JS 脚本,再通过执行 JS 脚本的形式传递到两边独立环境。
而 evaluateJavascript 的执行会受很多方面的影响,数据到达视图层并不是实时的。同一进程内的 WebView 实际上会共享一个 JS VM,如果 WebView 内 JS 线程正在执行渲染或其他逻辑,会影响 evaluateJavascript 脚本的实际执行时间,另外多个 WebView 也会抢占 JS VM 的执行权限;另外还有 JS 本身的编译执行耗时,都是影响数据传输速度的因素。

其实就是setData(object)时会调用JSON.stringify

循环应用例子:

var a = {}
a.b = a

JSON.stringify无法转换这种结构,所以报错。

如果非要这样写,可以改成:

var a = {}
a.b = JSON.parse(JSON.stringify(a))

参考:
Chrome sendrequest error: TypeError: Converting circular structure to JSON
微信小程序官方文档:优化建议

你可能感兴趣的:(微信小程序JS报错:Uncaught TypeError: Converting circular structure to JSON)