在一个html页面里面,引用了一段外部js<script type="text/javascript" charset="utf-8" src="adunion.js?id=29"></script>,我的adunion.js里有document.write(),根据id动态输出了一个浮动层。现在要求改成异步加载adunion.js。我查了下,好像异步加载是不能用document.write()的。那我该怎么做,才能做到异步加载?

解决方案 »

  1.   

    用iframe,不过一般联盟不允许iframe
      

  2.   

    乜可以参考一下还这个。http://coolshell.cn/articles/9749.html#jtss-tsina
      

  3.   

    http://www.requirejs.org/docs/why.html
    http://www.requirejs.org/docs/start.html
      

  4.   

     为什么不允许使用iframe呢?用iframe 是不是先创建一个iframe节点,然后js里的document.write()输出的位置就是相对于iframe来说了。类似于先加载一个框架,然后继续往下执行,框架里的内容异步加载。如果不允许使用,我要修改什么才能实现 异步加载一个动态层?
      

  5.   

    就一个div而已,何必使用js异步加载,直接放在页面就行了,不过联盟的代码可能会调用有documet.write的,所以最后直接放到页面上去
      

  6.   

    为什么非得用document.write呢,用dom操作不行么,document.write在页面加载后会将整个页面重写
      

  7.   

    用document.elementbyid("id").innerhtml()代替吗?
      

  8.   

    adunion.js里是获取id,然后调用php读数据库,再根据数据库中的数据生成相应的html。怕影响网页加载速度,所以老板要求用异步的
      

  9.   

    再根据数据库中的数据生成相应的html你可以用window.onload中调用ajax异步加载需要的内容就行了,然后设置div容器的innerHTML为返回的内容,不过注意不要有js,不会执行
      

  10.   

    现在是不是只有改document.write()用dom操作了?
      

  11.   

    用document.elementbyid("id").innerhtml()代替吗?也可以啊,或者dom的appenchild,但本人一般的用innerHTML操作感觉代码少点
      

  12.   

    adunion.js里是获取id,然后调用php读数据库,再根据数据库中的数据生成相应的html。怕影响网页加载速度,所以老板要求用异步的异步的话一般都是先获取数据,然后显示数据,一般都是js操作dom,这就没错啦,不行你试试,页面生成之后你绑定个事件document.write,看看是不是页面整个被重写了
      

  13.   

    adunion.js里是获取id,然后调用php读数据库,再根据数据库中的数据生成相应的html。怕影响网页加载速度,所以老板要求用异步的异步的话一般都是先获取数据,然后显示数据,一般都是js操作dom,这就没错啦,不行你试试,页面生成之后你绑定个事件document.write,看看是不是页面整个被重写了我现在改成了dom操作,adunion.js里是用ajax调用的php,我怎么测试能看出来是异步加载?
      

  14.   

    adunion.js里是获取id,然后调用php读数据库,再根据数据库中的数据生成相应的html。怕影响网页加载速度,所以老板要求用异步的异步的话一般都是先获取数据,然后显示数据,一般都是js操作dom,这就没错啦,不行你试试,页面生成之后你绑定个事件document.write,看看是不是页面整个被重写了
    页面中加入了下面这些代码<script>
    (function(){
    var ad = document.createElement("script");
    ad.type="text/javascript";
    ad.charset="utf-8";
    ad.async = true;
    ad.src="adunion.js?id=38";
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(ad,s);
    })();
    </script>
    然后adunion.js里var div = document.createElement("div");
        div.setAttribute("id","adunion_g3_html_id");
        //div.style.width="auto";
       // div.style.height="auto";
        document.body.appendChild(div);
        document.getElementById("adunion_g3_html_id").innerHTML = "测试测试测试";
    页面完全不显示内容。
      

  15.   

    adunion.js里是获取id,然后调用php读数据库,再根据数据库中的数据生成相应的html。怕影响网页加载速度,所以老板要求用异步的异步的话一般都是先获取数据,然后显示数据,一般都是js操作dom,这就没错啦,不行你试试,页面生成之后你绑定个事件document.write,看看是不是页面整个被重写了
    页面中加入了下面这些代码<script>
    (function(){
    var ad = document.createElement("script");
    ad.type="text/javascript";
    ad.charset="utf-8";
    ad.async = true;
    ad.src="adunion.js?id=38";
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(ad,s);
    })();
    </script>
    然后adunion.js里var div = document.createElement("div");
        div.setAttribute("id","adunion_g3_html_id");
        //div.style.width="auto";
       // div.style.height="auto";
        document.body.appendChild(div);
        document.getElementById("adunion_g3_html_id").innerHTML = "测试测试测试";
    页面完全不显示内容。不对,这样是显示内容的document.getElementById("adunion_g3_html_id").innerHTML = html但是改成我生成的html,就不显示了,调试也发现,只有那个div,其他html都没有
      

  16.   

    ad.async = true;
    可需高级浏览器
      

  17.   

    什么意思?这个不是html5支持的吗?现在加不加影响不大吧
      

  18.   

    adunion.js里是获取id,然后调用php读数据库,再根据数据库中的数据生成相应的html。怕影响网页加载速度,所以老板要求用异步的异步的话一般都是先获取数据,然后显示数据,一般都是js操作dom,这就没错啦,不行你试试,页面生成之后你绑定个事件document.write,看看是不是页面整个被重写了我现在改成了dom操作,adunion.js里是用ajax调用的php,我怎么测试能看出来是异步加载?
    异步加载说白点就是再不跳转的情况下进行数据交互
      

  19.   

    <script>
    (function(){
        var ad = document.createElement("script");
        ad.type="text/javascript";
        ad.charset="utf-8";
        ad.async = true;
        ad.src="adunion.js?id=38";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(ad,s);
    })();
    </script>为什么我这么写,在我的adunion.js里获取不到id值了?同步加载的时候就可以获取到,现在获取的id为空
      

  20.   

    哥们,有gitHub帐号帮忙做个任务,有报酬。
    http://hi.baidu.com/iphone88s/item/a3d0f40dbbbf7dda1ef0466a