d3.json() AJAX 関数をラップする一般的な関数をいくつか作成しました。
this.getData4 = function(url, returnFunc, param1, param2, param3) {
d3.json(url, function(returnData) {
if (returnData !== null) {
returnFunc(returnData, param1, param2, param3);
}
});
}
はい、これは醜いです。我慢してください。このスニペットの 2 行目と 3 行目にブレークポイントを挿入すると、リクエストが適切に送信されていることがわかります。たとえば、param1
= 0、1、2、および 3 の 4 つの要求を送信します。その後、応答が匿名のコールバック関数に返され、ほとんどが複製されます。たとえば、一連の応答が返される可能性があります。ここでは、param1
= 1です。 、1、1、0、2、2、2、3、3、3。
サーバーログを見ると、4 つのリクエストしかヒットしていません。Chrome のネットワーク タブを見ると、正しい数の応答が表示されています。ただし、コールバック関数は d3 内から複数回呼び出されます。
もう少し情報: 私は d3 2.4.2 を使用しています。また、d3/lib 内の jQuery バージョンも置き換えました。d3 に同梱されていた jQuery は 1.4.2 で、最新の d3 でもそうであると思われます。ただし、この jQuery の AJAX メソッドには重大なメモリ リークがあり、これを修正するために jQuery 1.7.2 に落とし込みました。D3 は交換について不満を言うことはありませんでしたが、この問題について他に情報が見つからないため、2 つの jQuery の間に厳密な互換性がない可能性があると思われます。