Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';只有当一系列o XHR(IO)请求成功时,在YUI3中调用函数的最佳方法是什么?_Javascript_Ajax_Yui_Yui3 - Fatal编程技术网

Javascript 什么';只有当一系列o XHR(IO)请求成功时,在YUI3中调用函数的最佳方法是什么?

Javascript 什么';只有当一系列o XHR(IO)请求成功时,在YUI3中调用函数的最佳方法是什么?,javascript,ajax,yui,yui3,Javascript,Ajax,Yui,Yui3,我想这个问题不仅仅是针对YUI的,而是我正在使用的JS库,具体的回答会很有帮助 基本上,在加载页面时,我希望脚本使用Y.io运行几个XHR,如果它们都成功返回数据,那么我希望脚本继续下一步,这将操作接收到的数据 我可以想出一些方法来做这件事,但它们对我来说都有点笨拙,我希望有人有更好的建议。到目前为止,我的想法是: 将我想要的所有数据整合到一个JSON响应中,因此如果一个请求是好的,那么继续。(这是我最不喜欢的解决方案) 当第一个Y.io请求返回成功时,调用下一个,依此类推;当最后一个请求成功时

我想这个问题不仅仅是针对YUI的,而是我正在使用的JS库,具体的回答会很有帮助

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

我可以想出一些方法来做这件事,但它们对我来说都有点笨拙,我希望有人有更好的建议。到目前为止,我的想法是:

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

  • 还有更好的主意吗?目前我对我的两个方案都不太满意,但我倾向于选择第二个方案。

    两个方案都有优点:

  • 此方法减少了事务量,从而减少了传输开销
  • 此方法可能会减少通过线路传输的数据总量,并通过允许客户端在其他请求处于队列中时更快地开始工作来减少UI延迟时间
  • JavaScript适合于这两种方法中的任何一种。第一个是直接的,第二个可以通过链接回调来完成


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

    两种实现都有优点:

  • 此方法减少了事务量,从而减少了传输开销
  • 此方法可能会减少通过线路传输的数据总量,并通过允许客户端在其他请求处于队列中时更快地开始工作来减少UI延迟时间
  • JavaScript适合于这两种方法中的任何一种。第一个是直接的,第二个可以通过链接回调来完成


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

    您不需要对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' });
    

    您不需要排队等待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' });
    

    我没有发送太多数据,但我认为第二种方法也更好,因为我可以在零件进入时单独处理它们。谢谢我没有发送太多数据,但我认为第二种方法也更好,因为我可以在零件进入时单独处理它们。谢谢谢谢,我希望这样的事情是可能的。谢谢,我希望这样的事情是可能的。