0

我想这个问题不仅是 YUI 特有的,而且是我正在使用的 JS 库,具体的答案会很有帮助。

基本上在加载页面时,我希望脚本使用 Y.io 运行一些 XHR,如果它们都成功返回数据,那么我希望脚本继续下一步,这将处理接收到的数据。

我可以想到几种方法来做到这一点,但它们对我来说似乎有点笨拙,我希望有人有更好的建议。到目前为止我的想法:

  1. 将我想要的所有数据整合到一个 JSON 响应中,因此如果该请求很好,请继续。(这是我最不喜欢的解决方案)。
  2. 当第一个 Y.io 请求返回成功时,调用下一个,依此类推,当最后一个成功时,我知道一切都成功并继续执行脚本的下一步。

那里有更好的想法吗?目前我不是很喜欢我的任何一个,但我倾向于选择二。

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 适用于这两种方法中的任何一种。第一个是直截了当的,第二个可以通过链接回调来完成。

如果您需要/可以尽早开始处理数据,则第二种方法更可取。如果在处理之前需要所有数据,则需要第一种方法。这真的完全取决于你的情况。一般来说,如果你可以摆动它,第二种方法(多部分而不是一个大响应)更可取。

于 2009-12-06T10:12:12.297 回答