Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript knockoutJS错误:将循环结构转换为JSON_Javascript_Jquery_Knockout.js - Fatal编程技术网

Javascript knockoutJS错误:将循环结构转换为JSON

Javascript knockoutJS错误:将循环结构转换为JSON,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我遇到了一个错误:将循环结构转换为JSON 下面是场景- 我从两个不同的绑定调用了两个不同的函数 按钮1绑定- event: { keypress: $root.AddComments } 这个函数的定义如下 self.AddComments = function (data, event) { try { var Id = 0; if ($.isNumeric(data.Id)) { Id = data.Id;

我遇到了一个错误:将循环结构转换为JSON

下面是场景-

我从两个不同的绑定调用了两个不同的函数

按钮1绑定-

event: { keypress: $root.AddComments }
这个函数的定义如下

self.AddComments = function (data, event) {

try {
            var Id = 0;
            if ($.isNumeric(data.Id)) {
                Id = data.Id;
            } else {
                Id = data.Id();
            }

            var HdnSaveChanges = document.getElementById('HdnSaveChanges');
            HdnSaveChanges.value = "Unsaved";

            if (event.which == 13) {

                if (data.Comment() != "") {

                    HdnSaveChanges.value = "Saved";


                    var Comment1 = { "Description": "" + data.Comment() + "" };
                    ajaxRequest("post", "/api/myAPI/PostComment/" + (Id || "") + "/" + (loginUserId || ""), Comment1, null)
                     .done(function (result) {
                         var newId2 = [result];

                         var tempComment = new Comment(newId2[0], Id);
                         tempComment.ParentObj = data;
                         tempComment.User = tempComment.User();
                         tempComment.BadgeTypeCss("SmallBadgeType SmallBadgeType" + tempComment.User.BadgeType);
                         tempComment.CurrentLevelCss("SmallCurrentLevel SmallCurrentLevel" + tempComment.User.CurrentLevel);

                         var id = ko.utils.arrayFirst(self.ids(), function (currentIds) {

                             return currentIds.Id() == Id;

                         });

                         if (id) {

                             tempComment.MeLiked = ko.observable(false);
                             tempComment.MeUnLiked = ko.observable(true);
                             idea.comments.push(tempComment);
                             idea.TotalComments(data.TotalComments() + 1);
                         }                         

                     })
                     .fail(function (jqxhr, textStatus, error) {
                         console.log("Request Failed" + textStatus + "," + error + ",," + jqxhr.toString());
                     });

                    data.Comment("");
                }
            }
            return true;           
        }
        catch (e)
        { }
    };
第二个按钮绑定是-click:$root.SubmitOnClick 定义是这样的-

self.SubmitOnClick=  function (data, event) {

        var Id = 0;
        if ($.isNumeric(data.Id)) {
            Id = data.Id;
        } else {
            Id = data.Id();
        }
        ajaxRequest("post", "/api/myAPI/Update/" + (Id || "") + "/" + (loginUserId || ""), data, null)
         .done(function (result) {

             var newId3 = [result];

             var id1 = ko.utils.arrayFirst(self.ids(), function (currentIds) {

                 return currentIds.Id() == Id;

             });

             if (id1) {


                 id1.MyValue1(newId3[0].MyValue1);
                 id1.MyValue2(newId3[0].MyValue2);
                 id1.MyValue3(newId3[0].MyValue3);
                 id1.TotalValue1(newId3[0].TotalValue1);
                 id1.TotalValue2(newId3[0].TotalValue2);
                 id1.TotalValue3(newId3[0].TotalValue3);

                 id1.Average = ko.computed(function () {

                     var sum = id1.TotalValue1() + id1.TotalValue2() + id1.TotalValue3();

                     if (sum > 0) {

                         return Math.round((sum / 3) * 10) / 10;
                     }
                     else {
                         return 0;
                     }
                 }).extend({ notify: 'always' });

             }

         })
         .fail(function (jqxhr, textStatus, error) {
             console.log("Request Failed" + textStatus + "," + error + ",," + jqxhr.toString());
         });

    }
当我在第一个函数之后调用第二个函数时,问题就出现了,但反之亦然


什么是在这里进行循环调用,以及解决方案是什么。

也许我误解了您的代码,但我认为您的问题在于:

ajaxRequest("post", "/api/myAPI/Update/" + (Id || "") + "/" + (loginUserId || ""), data, null)
为什么要在AJAX请求中提交数据?这是click事件参数,所以我觉得这不是必要的和/或是无意的


如果数据包含AJAX请求所需的某些信息,我建议您提取特定值并提交您自己的对象。

您是否能够创建一个JSFIDLE来复制该问题?因为目前我认为这里没有足够的信息来帮助你。另外,进入http调用的数据的结构是什么?如果有帮助,当一个对象属性包含指向无法转换为JSON的DOM元素的指针时,会出现此错误。我猜您试图保存为JSON的data.Comment或data.Id包含指向DOM元素的指针;例如,如果data.Id==$'some-Id'而不是'some-Id'。是的,您完全正确。ajaxrequest中的数据正在此处创建循环引用。谢谢