Javascript:TypeError:循环对象值

时间:2015-09-01 14:44:40

标签: javascript json

我正在尝试对javascript对象进行字符串化,但是当我这样做时会出现以下错误:

  

TypeError:循环对象值

我不相信我的代码包含任何循环引用(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())但我不明白为什么!

2 个答案:

答案 0 :(得分:4)

这通常是因为您尝试序列化具有在循环中指向彼此的属性的JavaScript对象。

在您的示例中,newServiceObject.serviceCodeElemList指向一个jQuery对象,其中包含循环:其context属性指向文档对象。文档对象具有指向DOM元素的指针,这些元素通过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>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

发现它!

我的问题是当使用jquery构建数组时,我应该在map函数之后包含ToArray()方法。

    var serviceCodeElemList = $(".ServiceCodeName").map(function() { return $(this).html(); } ).ToArray();

因此,当数组包含在对象中时,它是标准数组而不是jquery对象。