【问题标题】:AngularJs resolving errors caused by circular JSON StructuresAngularJs 解决循环 JSON 结构引起的错误
【发布时间】:2016-08-10 02:12:24
【问题描述】:

所以我遇到了以下错误:

chartsuccessfulapploginsController.js:59 TypeError:将循环结构转换为 JSON 在 Object.stringify(本机)

使用这段代码,从图表中检索数据:

 var appjson = '{\"APP_DATA_RETRIEVED\" : \"fail\"}';
 var appPostRequest = $.get(appurl, data, appconfig);
 appPostRequest.done(function(appdata){
     console.log(appdata);
     var date=$scope.final.rows[selectedItem.row].c[0].v;
     appjson = JSON.stringify(appdata);
     console.log(appjson);
     var postResponse = jQuery.parseJSON(appjson);
     var postResponse2=postResponse.Response;
     var post=[];
     console.log(postResponse2.length);
     for(i=0; i<postResponse2.length; i++){
         var data = postResponse2[i];
         var dt = new Date(postResponse2[i]['startTime']);
         var day = (dt.getMonth() + 1) + '-' + dt.getDate() + '-' + dt.getFullYear();
         if(day==date){
             post=post.concat(data);
             console.log(data);
         }
     }
     console.log(post);
     $scope.gridOptions8.data=post;
     $scope.failchartvisible=true;
     $scope.successchartvisible=false;
     console.log($scope.gridOptions8.data);
     $scope.$apply()//error originates from here

done 函数中的“appdata”参数是一个 JSON 对象,始终具有这种结构:

{
    "Response": [{
        "challenge": "rp6lssenku72b2ppr4gkjb4q92",
        "startTime": "2016-04-26 10:41:46.0",
        "successfullyCompleted": false,
        "id": 1,
        "username": "bojan1037"
    }, {
        "challenge": "ljtqvmk1mcqqqg5m0op0fljnek",
        "startTime": "2016-04-26 10:49:56.0",
        "successfullyCompleted": false,
        "id": 4,
        "username": "bojan1037"
    }, {
        "challenge": "h062sm69lpkib7t3sk4fuppi1v",
        "startTime": "2016-04-26 14:53:31.0",
        "successfullyCompleted": false,
        "id": 10,
        "username": "bojan1037"
    }],
    "Error": ""
}

我知道它与 json.stringify 有关。但是,我一生都无法弄清楚如何修复该错误,因为我看不到该 appdata 如何具有循环引用。谁能帮我弄清楚?谁回答正确,我将永远感激不尽。

【问题讨论】:

  • appdata 是否与您在 JSON.stringify 之前提供的完全一样?你console.log了吗?
  • @MMhunter 是的。完全一样。
  • 看起来问题不在您给定的代码中,因为它源自$scope.$apply()。我认为可能在一些 $watch 或绑定函数中。
  • 问题是这整个事情以前都有效。唯一的区别是 JSON 只是 JSON 对象的数组
  • 目前还不清楚您的数据在哪里被破坏,但很清楚的是您正在尝试使用 jQuery 来解析和修改您在角度绑定中使用的数据,这通常是不必要的并且容易出错。

标签: javascript angularjs json intellij-idea circular-dependency


【解决方案1】:

您不需要在代码中将变量类型从 json 转换为字符串:appjson = JSON.stringify(appdata);

我认为你最好在 angularjs 中使用$httpProvider

link 上检查自己的 API。

【讨论】:

  • 我这样做是为了检查错误。我是否使用 $httpProvider 与这个问题无关。
【解决方案2】:

看来罪魁祸首是你的变量appjson。不知何故,它正在使用 stigify JSON 对象创建循环引用。而不是这个:

var appjson = '{\"APP_DATA_RETRIEVED\" : \"fail\"}';

你可以尝试这样声明:

var appjson = {};

并且每当您觉得响应出乎意料时,您可以稍后用所需的 JSON 值填充这个空对象。

【讨论】:

  • 同样的结果,恐怕。
  • 试试这个 appjson = JSON.parse(appdata);
  • 不,返回此错误:Uncaught SyntaxError: Unexpected token o in JSON at position 1
  • 还有问题吗?你能试试这个 - appjson =JSON.parse(JSON.stringify(appdata));
猜你喜欢
  • 1970-01-01
  • 2019-05-03
  • 2020-03-07
  • 2019-01-31
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 2018-09-17
  • 2019-09-12
相关资源
最近更新 更多