JSON.stringify不能序列化循环结构:Ionic / AngularFire应用的iOs9错误



我今天更新了我的Xcode,并在iOs9版本上运行我的Ionic应用程序。每次我从ng-repeat列表点击到detail视图时,Xcode控制台都会弹出新的错误。错误是:

error JSON.stringify()ing argument: TypeError: JSON.stringify cannot serialize cyclic structures.

这个错误似乎是由AngularFire的firebaseObject引起的。这里是如何重复的问题(必须构建到ios和看到xcode7中的错误):

  1. 使用Ionic starter侧边菜单模板:

    $ sudo npm install -g ionic cordova
    $ ionic start myApp sidemenu
    
  2. 按如下方式修改PlaylistsCtrl和PlaylistCtrl:

.controller('PlaylistsCtrl', function($scope, $firebaseObject, $firebaseArray) {
  $scope.playlists = [];
  var ref = new Firebase(MYFIREBASEURL);
  var tasks = $firebaseArray(ref.child('tasks'));
  $scope.playlists = tasks;
})
.controller('PlaylistCtrl', function($scope, $stateParams, $firebaseObject) {
  var id = $stateParams.playlistId;
  console.log(id);
  var ref = new Firebase(MYFIREBASEURL);
  var task = $firebaseObject(ref.child('tasks').child(id));
  console.log(task);
  $scope.task = task;
});

修改starter模板自带的两个视图:Playlists和Playlist,如下所示:

<ion-view view-title="Playlists">
  <ion-content>
    <ion-list>
      <ion-item ng-repeat="playlist in playlists" href="#/app/playlists/{{playlist.$id}}">
        {{playlist.$id}} / {{playlist.title}}
      </ion-item>
      <ion-item class="item-text-wrap">{{task.title}} / {{task.$id}}</ion-item>
    </ion-list>
  </ion-content>
</ion-view>
<ion-view view-title="Playlist">
  <ion-content>
    <h1>{{task.$id}}</h1>
   	<p>{{task.title}}</p>
  </ion-content>
</ion-view>

运行$ionic Build ios构建侧边菜单启动器应用程序,然后在xcode7中打开xcode文件。在实际设备上运行——比如iPhone 5S(我的设备)。在xcode日志窗口中记录。

当点击列表项并进入详细播放列表视图时,它抛出如下错误

2015-09-29 10:20:03.868 firebaseObjerr[52:14 . 2668] error JSON.stringify()ing argument: TypeError: JSON。Stringify不能序列化循环结构。

并添加此处指示的ios9修复:在此处输入链接描述没有解决问题。请帮助!

[编辑]

这是我的系统信息(作为Ionic, Cordova是最新的):

Your system information:
Cordova CLI: 5.3.3
Gulp version:  CLI version 3.9.0
Gulp local:  
Ionic Version: 1.1.0
Ionic CLI Version: 1.6.4
Ionic App Lib Version: 0.3.8
ios-deploy version: 1.7.0 
ios-sim version: 5.0.1 
OS: Mac OS X Yosemite
Node Version: v0.12.5
Xcode version: Xcode 7.0 Build version 7A220 

对于firebase和AngularFire,我从firebase CDN中获取:

 <!-- Firebase -->
<script src="https://cdn.firebase.com/js/client/2.2.4/firebase.js"></script>
<!-- AngularFire -->
<script src="https://cdn.firebase.com/libs/angularfire/1.1.2/angularfire.min.js"></script>

我也遇到过类似的问题。结果发现它是在以下情况下引起的:

  var userRef = new Firebase(FIREBASE_URL + '/users').child(uid);
  profile = $firebaseObject(userRef);
  console.log(profile)

是否可能您正在尝试记录具有循环依赖关系的firebase数据结构?

尝试删除console.log()行。

删除console.log对我有效。我不得不做以下我的代码(Ionic谷歌分析插件- https://ionicframework.com/docs/native/google-analytics/)

  // Google Analytics (console.log throws errors)
  return GoogleAnalytics.startTrackerWithId("UA-97459358-1")
    .then(() => {
      //console.log('Google analytics is ready now');
      return GoogleAnalytics.enableUncaughtExceptionReporting(true)
    }).then((_success) => {
      //console.log("startTrackerWithId success")
    }).catch((_error) => {
      //console.log("enableUncaughtExceptionReporting", _error)
    })

最新更新