javascript - jquery关于异步load多个页面的问题
PHPz
PHPz 2017-04-11 11:15:36
[JavaScript讨论组]

大家好,本人在开发中为了让页面能组件化(可能跟那个web component概念挺像,我也在学vue.js之类的,但学的十分懵逼),把页面分成几部分,每个部分单独写在不同的html文件,每个html文件包含其对应的html,css和js。
这样当我加载一个页面的不同部分的时候我是这样写的:

$(元素1).load(地址1,function(){
    $(元素2).load(地址2,function(){
        $(元素3).load(地址3,function(){
    
        })
    })
})

这个写法运行之后,每个文件的js代码都能运行,但是这种多重嵌套方式我感觉看起来不太美观,而且里边的回调方法一旦报错,浏览器调试工具也没法追踪得了错误。
我试着想用$.when().done()来管理:

$.when(
    $(元素1).load(地址1);
).done(function(){
    方法
    $(元素2).load(地址2);
})

但是这样写像是没等when里边执行完就执行done里边的方法了
所以我想问下有没有好一点的写法。。

PHPz
PHPz

学习是最好的投资!

全部回复(1)
黄舟
$.when(
    $('#dom1').load('url1')
).done(function(){
    //方法
    $('#dom2').load('url2');
})

通过查jquery API得知$('#dom1').load('url1')返回不是Deferred对象,而是$('#dom1')。因为$.when需要传Deferred对象,意味着 $('#dom1').load('url1')不能作为$.when传参。


推荐使用Q.js: A promise library for JavaScript

    function loadAsync(dom,url){
        var defer = Q.defer();
        $.load(dom,url,function(){
            defer.resolve();
        });        
        return defer.promise;
    }
    loadAsync('#dom1','url1').then(function(){
        return loadAsync('#dom2','url2');
    }).then(function(){
        return loadAsync('#dom3','url3');
    }).then(function(){
        //do something you like.
    });
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号