0

この質問はYUIに固有のものではないと思いますが、それは私が使用しているJSライブラリであり、特定の回答が役立つでしょう.

基本的に、ページをロードするときに、スクリプトで Y.io を使用していくつかの XHR を実行し、すべてのデータが正常に返されたら、スクリプトを次のステップに進めて、受信したデータを操作するようにします。

これを行ういくつかの方法を考えることができますが、それらはすべて私には少し不器用に思えます.誰かがより良い提案をしてくれることを願っています. これまでの私の考え:

  1. 必要なすべてのデータを 1 つの JSON 応答に統合します。その 1 つの要求が適切であれば、先に進みます。(これは私が最も気に入らない解決策です)。
  2. 最初の Y.io リクエストが成功すると、次のリクエストが呼び出されます。最後のリクエストが成功すると、すべてが成功したことがわかり、スクリプトの次のステップに進みます。

より良いアイデアはありますか?現時点ではどちらもあまり好きではありませんが、オプション 2 に傾いています。

4

2 に答える 2

2

Y.io呼び出しをキューに入れる必要はありません。それらをすべて一度に送信し、すべてが戻ってきたら次に進みます。

var data = {};

function step(id, o, part) {
    try {
        data[part] = Y.Lang.JSON.parse(o.responseText);

        if (data.a && data.b && data.c) {
            processData(data);
        }
    }
    catch (e) {
        /* handle bad JSON, failure case */
    }
}

Y.io(a_url, { on: { success: step }, 'arguments': 'a' });
Y.io(b_url, { on: { success: step }, 'arguments': 'b' });
Y.io(c_url, { on: { success: step }, 'arguments': 'c' });
于 2009-12-06T19:10:14.503 に答える
1

どちらの実装にもメリットがあります。

  1. この方法により、トランザクションの量が削減され、トランスポートのオーバーヘッドが削減されます
  2. この方法により、ネットワーク経由で転送されるデータの総量が削減され、他のリクエストがキューに入っている間にクライアント側がより早く作業を開始できるようになるため、UI のラグ タイムが短縮される可能性があります。

JavaScript は、これらの方法のいずれにも適しています。1 つ目は簡単ですが、2 つ目はコールバックをチェーンすることで実行できます。

データの処理をすぐに開始する必要がある場合は、2 番目の方法をお勧めします。処理前にすべてのデータが必要な場合は、最初の方法が必要です。それは本当にすべてあなたの状況に依存します。一般に、スイングできる場合は、2 番目の方法 (1 つの大きな応答ではなく、複数の応答) が推奨されます。

于 2009-12-06T10:12:12.297 に答える