2015-02-04 81 views
0

我遇到了一個錯誤:將圓形結構轉換爲JSONknockoutJS錯誤:將圓形結構轉換爲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()); 
     }); 

    } 

當我在fi之後調用第二個函數時出現問題第一個功能,但副詩功能正常。

什麼是在這裏發出通告,什麼可能是解決方案。

+1

你能夠創建一個jsfiddle來複制這個問題嗎?因爲目前我認爲這裏沒有足夠的信息來幫助你。還有什麼是數據進入http調用的結構? –

+0

如果它可以有任何幫助,當其中一個對象屬性包含一個指向DOM元素的指針(不能轉換爲JSON)時,會出現此錯誤。我的猜測是'data.Comment'或'data.Id'(你試圖保存爲JSON)包含一個指向DOM元素的指針;例如,如果'data.Id === $('#some-id')'而不是''#some-id''。 – Tyblitz

回答

0

也許我誤解你的代碼,但我覺得你的問題是在這裏:

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

你爲什麼在AJAX請求提交data?這是點擊事件參數,所以我有一種感覺,這是不必要的和/或是無意的。

如果data包含您需要用於AJAX請求的一些信息,我會建議將特定值提取出來並提交您自己的對象。

+0

是的,你是完全正確的「數據」在ajaxrequest在這裏創建循環引用。謝謝 !! – satyanshu

相關問題