日期:2014-05-16  浏览次数:20375 次

高手们,动态加载脚本后找不到加载的对象,怎么解决?
JScript code

//jquery.common.js里面的方法
include: function (file) {
        var files = typeof file == "string" ? [file] : file;
        for (var i = 0; i < files.length; i++) {
            var name = files[i].replace(/^\s|\s$/g, "");
            var att = name.split('.');
            var ext = att[att.length - 1].toLowerCase();
            var isCSS = ext == "css";
            var tag = isCSS ? "link" : "script";
            var attr = isCSS ? " type='text/css' rel='stylesheet' " : " language='javascript' type='text/javascript' ";
            var link = (isCSS ? "href" : "src") + "='" + name + "'";
            if ($(tag + "[" + link + "]").length == 0) {
                if (isCSS) {
                    var head = document.getElementsByTagName("head").item(0);
                    var css = document.createElement("link");
                    css.href = name;
                    css.rel = "stylesheet";
                    css.type = "text/css";
                    head.appendChild(css);
                }
                else {
                    $.ajax({ type: 'GET', url: name, async: false, dataType: 'script' });
                }
            }
        }

    }



HTML code

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>测试页面</title>        
        <script src="jquery-1.8.0-vsdoc.js" language="javascript" type="text/javascript" charset="utf-8"></script>      
 
      <script src="jquery.common.js" language="javascript" type="text/javascript" ></script>
    
      
    </head>
    <body>   
<script language="javascript" type="text/javascript">
         $(function(){
          $.include(["/Dialog2/skins/default.css", "/Dialog2/jquery.artDialog.js"]);
});
         function test() {
             if (typeof ($.dialog) == undefined|| ($.dialog==null)) {
                 alert(22);
                 setTimeout(function () { $.dialog.alert("正在加载..."); }, 2000);
                 
             }
             else {

                 $.dialog.alert("正在加载...");
             }
         }
     
     </script>
  <input type="button" value="获取dialog对象" onclick="test();"/>

</body>



$.dialog 对象写在jquery.artDialog.js文件当中,其中这个脚本文件是通过jquery.common.js 的$.include方法引用进去
为什么始终都无法获取$.dialog这个对象呢,也就是说jquery.artDialog的里面所有方法对象都无法在html页面中调用呢,
当然如果直接引用jquery.artDialog.js到html页面是正常的。

但我就要通过jquery.common.js 的$.include方法引用,请问大家怎么解决。

------解决方案--------------------
$.include(["/Dialog2/skins/default.css", "/Dialog2/jquery.artDialog.js"]);
从$(function(){});中移出试试。
------解决方案--------------------
把URL写全,比如

$.include(["/Dialog2/skins/default.css", "http://theforever.csdn.net/Dialog2/jquery.artDialog.js"]);

------解决方案--------------------
include 是异步导入js.

js 没加载完毕,你下面调用,当然有问题。

解决办法:
1、回调函数
2、递归 setTimeout 判断是否加载完毕


// 动态导入js
function include(src,encoding,fun) 

var s = $C('script');