Stripe Checkout.jsを使用して支払いを作成しています。私はそれが成功したサーバにトークンを送信し、ハンドラを作成しています:ストライプ - JSON循環参照
let handler = StripeCheckout.configure({
key: 'my_key',
image: 'image.png',
locale: 'auto',
token: token => {
console.log(token.id);
// ... send token to server
}
});
その後、私はトークンを作成するためのハンドラを使用します。
handler.open({
name: 'Test',
description: 'test',
billingAddress: false,
currency: 'eur',
amount: '1200',
});
このハンドラは、テストcheckout.jsポップアップをトリガー私が記入してPayをクリックしてください。ボタンが緑色で表示され、正常に終了します。
しかし、一瞬の間ボタンが緑色に表示され、トークンが(ハンドラの成功コールバックで)コンソールに出力された瞬間、エラーがスローされます。
EXCEPTION: TypeError: Converting circular structure to JSON
スタックトレースの主要部分このです:コードを検査することにより
TypeError: Converting circular structure to JSON
at Object.stringify (native)
at Object.stringify (http://localhost:5000/dist/client/bundle.js:46294:29)
at RPC.sendMessage (https://checkout.stripe.com/checkout.js:1:18068)
at RPC.sendMessage (https://checkout.stripe.com/checkout.js:1:16180)
at https://checkout.stripe.com/checkout.js:1:17137
at RPC.ready (https://checkout.stripe.com/checkout.js:1:17416)
at RPC.invoke (https://checkout.stripe.com/checkout.js:1:17084)
at RPC.invoke (https://checkout.stripe.com/checkout.js:1:16180)
at RPC.processMessage (https://checkout.stripe.com/checkout.js:1:18899)
at RPC.processMessage (https://checkout.stripe.com/checkout.js:1:16180)
、我々が見る問題はここにある:
RPC.prototype.sendMessage = function(method, args) {
var err, id, message, _ref;
if (args == null) {
args = []
}
id = ++this.rpcID;
if (typeof args[args.length - 1] === "function") {
this.callbacks[id] = args.pop()
}
message = JSON.stringify({
method: method,
args: args,
id: id
});
Checkout.jsが循環参照を持つメッセージオブジェクトを作成したように見えるので、JSON.stringifyを呼び出してエラーを発生させようとします。
このエラーは致命的ではなく、お支払いは完了しましたが、これが何であり、どのように修正するのか分かりますか?
また、既知の回避策があります。
これはpostMessage
にオブジェクトを渡す前stringify
を呼び出すとMDN docsに応じて必要ではないかもしれないことをfull stack trace
注意です。
postMessage
は、thisに従って循環参照をサポートするシリアル化メカニズムを使用します。
したがって、自分自身への参照を持つオブジェクトをストリング化しています。それらの参照なしでそれを文字列化してください。 'args'とは何ですか? – dfsq
stringifyはストライプ・チェックアウト・コードにあり、アプリケーション・コードにはありません。 Stripeに問題を報告しましたが、誰かが回避策を知っているかもしれないので、ここに投稿しました。またAngular 2がベータ版の場合は、わからない –
JSON.stringifyでこのコードをデバッグしようとしましたか? – dfsq