2015-09-01 36 views
6

我試圖字符串化一個JavaScript對象,但是當我做這得到以下錯誤:的Javascript:類型錯誤:循環對象價值

TypeError: cyclic object value

我不相信我的代碼中包含任何循環引用( newServiceObject不在對象內部引用),所以我不明白爲什麼我會收到這條消息。

我想將包含兩個屬性和數組的對象轉換爲單個字符串。

var serviceName = $('#newServiceNameBox').val(); 
     var serviceCodeElemList = $(".ServiceCodeName").map(function() { return $(this).html(); }); 
     //create the new service object 
     var newServiceObject = {ServiceId:-1, ServiceName: serviceName, ServiceCodes: serviceCodeElemList }; 

     var appendNewService = '&newService='+JSON.stringify(newServiceObject); 

錯誤發生在最後一行(JSON.Stringify()),但我不知道爲什麼!

+0

你可以張貼在'newServiceObject'對象的JSON數據DOM元素? –

回答

4

這通常是因爲您試圖序列化具有在週期中彼此​​指向的屬性的JavaScript對象。

在您的示例中,newServiceObject.serviceCodeElemList指向一個jQuery對象,該對象確實有循環:其context屬性指向文檔對象。文檔對象有指向具有指針迴文檔通過ownerDocument財產

var jqueryObj = $('div'); 
 
    console.log(jqueryObj.context); // Document object 
 
    console.log(jqueryObj.context.body.firstChild.ownerDocument); // Document object 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div></div>

+0

看到上面的答案!根據我的問題,在代碼中看不到任何明顯的東西。我的猜測是,jQuery對象內部的東西是這樣的 –

+0

@NeilP我修改了答案來解釋循環在jQuery對象中的位置。 –

+0

解釋它! –

2

發現它!

我的問題是,當使用jQuery來構建數組時,我應該在映射函數之後包含ToArray()方法。因此當數組包含在對象中時,它是一個標準數組而不是jQuery對象。