[英]What's the best way to call a function in YUI3 only if a series o XHR (IO) requests are successful?
我想这个问题不仅是针对YUI的,还在于我正在使用的JS库,一个具体的答案会有所帮助。
基本上,在加载页面时,我希望脚本使用Y.io运行一些XHR,如果它们都成功返回了数据,则希望脚本继续进行下一步,它将处理接收到的数据。
我可以想到几种方法,但对我来说它们似乎都有些笨拙,我希望有人提出更好的建议。 到目前为止,我的想法是:
还有更好的主意吗? 目前,我并不真正喜欢我的任何一个,但我倾向于第二种选择。
您无需将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' });
两种实现都有优点:
JavaScript适用于这两种方法。 第一个很简单,第二个可以通过链接回调来完成。
如果您需要/可以早于以后开始处理数据,则最好使用第二种方法。 如果在处理之前需要所有数据,则需要第一种方法。 这真的取决于您的情况。 通常,如果可以摆动它,则最好使用第二种方法(多部分,而不是一个较大的响应)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.