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

时间:2015-02-04 18:24:40

标签: 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;
            } 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)
        { }
    };

第二个按钮绑定是 - 点击:$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());
         });

    }

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

在这里进行循环调用的原因是什么,可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

也许我误解了你的代码,但我认为你的问题就在这里:

ajaxRequest("post", "/api/myAPI/Update/" + (Id || "") + "/" + (loginUserId || ""), data, null)

为什么要在AJAX请求中提交data?这是点击事件参数,所以我觉得这不是必要的和/或是无意的。

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