微信小程序JS報錯:Uncaught TypeError: Converting circular structure to JSON

今天開發(fā)微信小程序調用setData時遇到一個JSON.stringify轉換一個循環(huán)引用結構的報錯。

setData工作原理
小程序的視圖層目前使用 WebView 作為渲染載體,而邏輯層是由獨立的 JavascriptCore 作為運行環(huán)境。在架構上,WebView 和 JavascriptCore 都是獨立的模塊,并不具備數(shù)據(jù)直接共享的通道。當前,視圖層和邏輯層的數(shù)據(jù)傳輸,實際上通過兩邊提供的 evaluateJavascript 所實現(xiàn)。即用戶傳輸?shù)臄?shù)據(jù),需要將其轉換為字符串形式傳遞,同時把轉換后的數(shù)據(jù)內容拼接成一份 JS 腳本,再通過執(zhí)行 JS 腳本的形式傳遞到兩邊獨立環(huán)境。
而 evaluateJavascript 的執(zhí)行會受很多方面的影響,數(shù)據(jù)到達視圖層并不是實時的。同一進程內的 WebView 實際上會共享一個 JS VM,如果 WebView 內 JS 線程正在執(zhí)行渲染或其他邏輯,會影響 evaluateJavascript 腳本的實際執(zhí)行時間,另外多個 WebView 也會搶占 JS VM 的執(zhí)行權限;另外還有 JS 本身的編譯執(zhí)行耗時,都是影響數(shù)據(jù)傳輸速度的因素。

其實就是setData(object)時會調用JSON.stringify。

循環(huán)應用例子:

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
微信小程序官方文檔:優(yōu)化建議

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,088評論 4 61
  • 一、js和Android調用的前提 在講js和Android的互調之前,我們要先設置好webview的一些基本配置...
    Hawkinswang閱讀 7,982評論 0 14
  • 前言 Web 頁面中的 JS 與 iOS Native 如何交互是每個 iOS 猿必須掌握的技能。而說到 Nati...
    幽城88閱讀 2,322評論 1 8
  • fdlso閱讀 145評論 0 0
  • 水陸草木之花,可愛者甚蕃。晉陶淵明獨愛菊;自李唐來,世人盛愛牡丹;予獨愛蓮之出淤泥而不染,濯清漣而不妖,中...
    Candy喵小姐閱讀 524評論 0 5

友情鏈接更多精彩內容