首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >并发AJAX回调:如何同步它们?

并发AJAX回调:如何同步它们?
EN

Stack Overflow用户
提问于 2013-07-13 11:24:17
回答 1查看 364关注 0票数 0

我的应用程序通过AJAX/JSONP加载HTML和JavaScript,而不是以标准方式加载页面。它在Iframe中工作,因此,它是与父帧保持通信的正确方式(Safari限制)。

我必须发出两个请求:加载自定义页面的JavaScript和HTML。为了确保一切正常,我可以先加载JavaScript,然后加载JavaScript (在JavaScript onload回调中)。但我希望这两项请求同时发出。

我准备了密码。当_finishLoading()和JavaScript都加载时,脚本必须调用JavaScript。是否有可能_finishLoading()函数不会在浏览器中执行?

代码语言:javascript
运行
复制
 function Loader()
 {
       this.load = function()
       {
                    // ...some code here...

        var this_ = this;

        var jsLoaded = false;
        var htmlLoaded = false;

        $.ajax(
            url: newUrl,
            dataType: "jsonp",
            jsonpCallback:
                function()
                {
                    $.ajax(
                        url: someUrl,
                        dataType: "html",
                        success:
                            function( data )
                            {
                                $( '#' + contentElId ).html( data );

                                if( htmlLoaded )
                                {
                                    this_._finishLoading()
                                }

                                jsLoaded = true;
                            }
                    );
                }
        );

        $.ajax(
            {
                url: someUrl2,
                dataType: "html",
                success:
                    function( data )
                    {
                        $( '#' + contentElId ).html( data )

                        if( jsLoaded )
                        {
                            this_._finishLoading()
                        }

                        htmlLoaded = true;
                    }
            }
        );
    }

}

更新.

我需要加载JavaScript,然后调用onload()来导入加载的Javascript。,如果你知道更方便的方式,然后分别加载,请让我知道

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-13 11:27:40

考虑使用$.when()函数

代码应该是这样的:

代码语言:javascript
运行
复制
        var this_ = this;

        var jsLoaded = false;
        var htmlLoaded = false;
        var deferred = $.Deferred();
        $.ajax(
            url: newUrl,
            dataType: "jsonp",
            jsonpCallback:
                function()
                {
                    $.ajax(
                        url: someUrl,
                        dataType: "html"
                        success: function(){
                           deferred.resolve();
                        }
                    );
                }
        );

        var promise2 = $.ajax(
            {
                url: someUrl2,
                dataType: "html",
            }
        );

        $.when(deferred, promise2).done(function(a1, a2){
           $( '#' + contentElId ).html(a1);
           $( '#' + contentElId ).html(a2);
           this_._finishLoading()
        });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17629722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档