【问题标题】:JSON.stringify cannot serialize cyclic structures: iOs9 error for Ionic / AngularFire appJSON.stringify 无法序列化循环结构:Ionic / AngularFire 应用程序的 iOs9 错误
【发布时间】:2015-12-26 02:59:09
【问题描述】:

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

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

该错误似乎是由 AngularFire firebaseObject 引起的。以下是如何复制问题(必须构建到 ios 并在 xcode7 中查看错误):

  1. 通过运行使用 Ionic starter sidemenu 模板:

    $ 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;
});

修改以下两个视图:播放列表和播放列表附带的入门模板:

<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 构建 sidemenu starter 应用程序,然后在 xcode7 中打开 xcode 文件。在实际设备上运行 - 就像 iPhone 5S(我的设备)。在 xcode 日志窗口中记下。

单击列表项并转到详细播放列表视图时,会抛出这样的错误

2015-09-29 10:20:03.868 firebaseObjerr[572:142668] 错误 JSON.stringify()ing 参数:TypeError: JSON.stringify 无法序列化循环结构。

并添加此处指示的 ios9 修复:enter link description here 没有解决问题。 请帮忙!

[编辑]

这是我的系统信息(因为 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>

【问题讨论】:

  • 此示例代码中没有任何内容会触发 JSON.stringify()。也没有解释播放列表是如何构建的,所以我们无法猜测循环引用在哪里发挥作用。
  • 这里也没有版本信息,也没有足够的数据来创建复制。
  • 操作对不起@Kato!我将帖子编辑为您的最后一封电子邮件,并且不小心删除了控制器代码(并替换为 HTML)。我的错!我添加了所有控制器代码以及我的版本信息。除了上述更改之外,我没有修改 sidemenu starter 中的任何其他代码。确切地说,我没有在我的代码中触发任何 JSON.stringify() 并且当 firebaseObject 加载到视图中并触发该错误时!

标签: ionic-framework angularjs-ng-repeat firebase ios9


【解决方案1】:

删除 console.log 对我有用。我必须对我的代码执行以下操作(Ionic Google Analytics 插件 - 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)
    })

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。事实证明它是在以下情况下引起的:​​

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

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

    尝试删除您的 console.log() 行。

    【讨论】:

      猜你喜欢
      • 2017-07-05
      • 2023-02-01
      • 2013-11-21
      • 2013-05-09
      • 2020-01-09
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多