Chrome 扩展程序中的错误处理:解决“将循环结构转换为 JSON”问题
使用 Chrome 扩展程序时,很常见与数据序列化相关的错误。其中一个错误是使用 chrome.extension.sendRequest 时遇到的“TypeError:将循环结构转换为 JSON”。当请求包含具有循环引用的对象时,会发生这种情况,从而阻止 JSON 序列化。
在提供的代码片段中,请求对象包含 pagedoc 属性。该变量可能代表一个 DOM 节点。 JavaScript 中的 DOM 节点具有循环引用,这对于 JSON 序列化来说是有问题的。
理解 DOM 中的循环引用
DOM 节点具有固有的循环引用,因为:
作为结果,JSON 序列化失败,因为它试图无限期地遍历循环引用。
解决方案:解决循环引用
要解决此问题,您可以在发送请求对象之前中断请求对象中的循环引用。由于 DOM 节点是分层的,因此您可以创建一个表示分层关系的新对象,而无需循环引用:
var newObj = { id: pagedoc.id, children: [] }; for (var i = 0; i < pagedoc.children.length; i++) { newObj.children.push({ id: pagedoc.children[i].id, ... // Continue building the nested structure without circular references }); }
将请求对象中的 pagedoc 替换为 newObj 以删除循环引用:
chrome.extension.sendRequest({ req: "getDocument", docu: newObj, name: 'name' }, function(response){ var efjs = response.reply; });
通过打破循环引用,您现在可以成功序列化请求对象并将其发送到扩展。然后,扩展程序可以处理请求并提供预期响应,而不会遇到“将循环结构转换为 JSON”错误。
以上是如何解决 Chrome 扩展中的'将循环结构转换为 JSON”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!