Saya punya yang berikut ...
chrome.extension.sendRequest({
req: "getDocument",
docu: pagedoc,
name: 'name'
}, function(response){
var efjs = response.reply;
});
yang memanggil berikut ini ..
case "getBrowserForDocumentAttribute":
alert("ZOMG HERE");
sendResponse({
reply: getBrowserForDocumentAttribute(request.docu,request.name)
});
break;
Namun, kode saya tidak pernah mencapai "ZOMG DI SINI" tetapi lebih tepatnya melemparkan kesalahan berikut saat berjalan chrome.extension.sendRequest
Uncaught TypeError: Converting circular structure to JSON
chromeHidden.JSON.stringify
chrome.Port.postMessage
chrome.initExtension.chrome.extension.sendRequest
suggestQuery
Adakah yang tahu apa yang menyebabkan ini?
pagedoc
?pagedoc
? 2. Referensi melingkar:a = {}; a.b = a;
Jawaban:
Ini berarti bahwa objek yang Anda lewati dalam permintaan (saya rasa itu
pagedoc
) memiliki referensi melingkar, seperti:JSON.stringify
tidak dapat mengubah struktur seperti ini.NB : Ini akan menjadi kasus dengan node DOM, yang memiliki referensi melingkar, bahkan jika mereka tidak melekat pada pohon DOM. Setiap node memiliki
ownerDocument
yang mengacudocument
pada sebagian besar kasus.document
memiliki referensi ke pohon DOM setidaknya melaluidocument.body
dandocument.body.ownerDocument
merujuk kembali kedocument
lagi, yang hanya merupakan salah satu dari beberapa referensi melingkar di pohon DOM.sumber
document
objek?try...catch
untuk menangkap kesalahan ini.Sesuai dokumen JSON di Mozilla ,
JSON.Stringify
memiliki parameter keduacensor
yang dapat digunakan untuk memfilter / mengabaikan item anak-anak saat mengurai pohon. Namun, mungkin Anda dapat menghindari referensi melingkar.Di Node.js kita tidak bisa. Jadi kita bisa melakukan sesuatu seperti ini:
Hasil:
Sayangnya sepertinya ada maksimum 30 iterasi sebelum secara otomatis mengasumsikan itu melingkar. Kalau tidak, ini akan berhasil. Saya bahkan menggunakan
areEquivalent
dari sini , tetapiJSON.Stringify
masih melempar pengecualian setelah 30 iterasi. Namun, itu cukup baik untuk mendapatkan representasi objek yang layak di tingkat atas, jika Anda benar-benar membutuhkannya. Mungkin seseorang dapat memperbaiki ini? Di Node.js untuk objek permintaan HTTP, saya mendapatkan:Saya membuat modul Node.js kecil untuk melakukan ini di sini: https://github.com/ericmuyser/stringy Jangan ragu untuk meningkatkan / berkontribusi!
sumber
'[Unknown:' + typeof(value) + ']'
Anda akan melihat cara memperbaiki sensor untuk memperlakukan fungsi dengan benar dan beberapa jenis lainnya.Salah satu pendekatan adalah strip objek dan fungsi dari objek utama. Dan meringkas bentuk yang lebih sederhana
sumber
Saya biasanya menggunakan paket npm melingkar-json untuk menyelesaikan ini.
Catatan: circular-json telah ditinggalkan, sekarang saya menggunakan flatted (dari pencipta CircularJSON):
dari: https://www.npmjs.com/package/flatted
sumber
Berdasarkan jawaban zainengineer ... Pendekatan lain adalah membuat salinan yang dalam dari objek dan menghapus referensi melingkar dan merangkai hasilnya.
sumber
Ini mungkin bukan jawaban yang terkait, tetapi tautan ini Mendeteksi dan memperbaiki referensi melingkar dalam JavaScript mungkin membantu mendeteksi objek yang menyebabkan ketergantungan melingkar.
sumber
Saya mengatasi masalah ini di NodeJS seperti ini:
sumber
Saya pernah mengalami kesalahan yang sama ketika mencoba membangun pesan di bawah ini dengan jQuery. Referensi melingkar terjadi ketika
reviewerName
ditugaskan secara kelirumsg.detail.reviewerName
. .Val () JQuery memperbaiki masalah, lihat baris terakhir.sumber
Saya mendapatkan kesalahan yang sama dengan formvaliadator jQuery, tetapi ketika saya menghapus console.log di dalam success: function, itu berhasil.
sumber
Untuk kasus saya, saya mendapatkan kesalahan itu ketika saya menggunakan
async
fungsi di sisi server saya untuk mengambil dokumen menggunakan luwak. Ternyata alasannya adalah saya lupa memasukkanawait
sebelum memanggilfind({})
metode. Menambahkan bagian itu memperbaiki masalah saya.sumber
Ini berfungsi dan memberi tahu Anda properti mana yang bundar. Ini juga memungkinkan untuk merekonstruksi objek dengan referensi
Contoh dengan banyak suara dihapus:
Untuk merekonstruksi panggilan JSON.parse (), kemudian loop melalui properti mencari
[Circular Reference]
tag. Kemudian potong itu dan ... eval ... denganthis
set ke objek root.Jangan evaluasi apa pun yang bisa diretas. Praktik yang lebih baik akan dilakukan
string.split('.')
kemudian mencari properti dengan nama untuk mengatur referensi.sumber