在 Stripe 中将循环结构转换为 JSON

Converting circular structure to JSON in Stripe

我正在尝试将 Stripe 支付方式集成到我的 Ionic2 应用程序中。

当我点击我的支付按钮时,会出现条纹支付框(我插入卡号、到期日期和 CVC),当我点击 "Pay" 按钮时,它会从蓝色变为绿色,一切看起来都是工作,但如果我检查我的浏览器控制台,我会看到这个错误:

EXCEPTION: Converting circular structure to JSONErrorHandler.handleError @ error_handler.js:47next @ application_ref.js:272schedulerFn @ async.js:82SafeSubscriber.__tryOrUnsub @ Subscriber.js:223SafeSubscriber.next @ Subscriber.js:172Subscriber._next @ Subscriber.js:125Subscriber.next @ Subscriber.js:89Subject.next @ Subject.js:55EventEmitter.emit @ async.js:74NgZone.triggerError @ ng_zone.js:278onHandleError @ ng_zone.js:257t.handleError @ polyfills.js:3e.runTask @ polyfills.js:3invoke @ polyfills.js:3
error_handler.js:52 ORIGINAL STACKTRACE:ErrorHandler.handleError @ error_handler.js:52next @ application_ref.js:272schedulerFn @ async.js:82SafeSubscriber.__tryOrUnsub @ Subscriber.js:223SafeSubscriber.next @ Subscriber.js:172Subscriber._next @ Subscriber.js:125Subscriber.next @ Subscriber.js:89Subject.next @ Subject.js:55EventEmitter.emit @ async.js:74NgZone.triggerError @ ng_zone.js:278onHandleError @ ng_zone.js:257t.handleError @ polyfills.js:3e.runTask @ polyfills.js:3invoke @ polyfills.js:3
error_handler.js:53 TypeError: Converting circular structure to JSON
    at JSON.stringify (<anonymous>)
    at RPC.sendMessage (checkout.js:2)
    at RPC.sendMessage (checkout.js:2)
    at checkout.js:2
    at RPC.ready (checkout.js:2)
    at RPC.invoke (checkout.js:2)
    at RPC.invoke (checkout.js:2)
    at RPC.processMessage (checkout.js:2)
    at RPC.processMessage (checkout.js:2)
    at RPC.message (checkout.js:2)

我知道我的问题与的问题基本相同,但是,由于7个月过去了,我想问问你是否有更好的方法来解决这个问题,因为写的人已经接受了回答说这种解决方式可怕.

顺便说一句,如果我按照他的回答,我是否必须更换这个

const _stringify = JSON.stringify;
JSON.stringify = function (value, ...args) {
  if (args.length) {
    return _stringify(value, ...args);
  } else {
    return _stringify(value, function (key, value) {
      if (value && key === 'zone' && value['_zoneDelegate'] 
          && value['_zoneDelegate']['zone'] === value) {
        return undefined;
      }
      return value;
    });
  }
};  

有了这个:

message = JSON.stringify({
    method: method, 
    args: args,
    id: id
});

???

或者我应该保留两个块(一个在另一个之前)?

提前致谢。

不幸的是,这仍然是唯一的答案。

您只需要包括:

const _stringify = JSON.stringify;
JSON.stringify = function (value, ...args) {
  if (args.length) {
    return _stringify(value, ...args);
  } else {
    return _stringify(value, function (key, value) {
      if (value && key === 'zone' && value['_zoneDelegate'] 
          && value['_zoneDelegate']['zone'] === value) {
        return undefined;
      }
      return value;
    });
  }
}; 

在您启动 Checkout 之前的代码中;您包含的另一个代码块是问题所在,但它在 Checkout 本身内部,因此您无需担心。