2011-03-14 54 views
0

我一直在使用这一段脚本到外部.js文件加载到文档:加载外部.js文件使用jQuery 1.5.1

$.ajax({ 
    url: dir + '/' + module + '.js', 
    dataType: 'script', 
    async: false, 
    success: function() { 
     modules[module].init(); 
    }, 
    error: function(xhr) { 
     alert('Error loading module "' + module + '"'); 
    } 
}); 

但是当我切换到的jQuery 1.5.1(而不是1.4 .2我以前使用过)它停止工作。它加载该文件,但没有成功 - 文件内容被传递的错误xhr.responseText

回答

0

您能否使用$阿贾克斯(),而不是“成功”事件中的“完整”事件?


如果您需要动态地加载javascript源文件,你可以在[脚本]标签附加到[主治]标签:

$("head").append(
    unescape('%3Cscript src="/path/to/javascript.js"%3E%3C/script%3E'); 
); 

与唯一的问题,就是你必须防止该脚本不止一次被加载。

我喜欢有测试对于我知道被定义在动态加载的JavaScript文件的功能的存在下,如果()的条件。我使用underscore.js和_.isFunction()来测试这个(http://documentcloud.github.com/underscore/#isFunction)。只有当没有定义的测试功能加载JavaScript文件的src:

if(!(_.isFunction(someTestFunction))) { 
    $("head").append(
    unescape('%3Cscript src="/path/to/javascript.js"%3E%3C/script%3E'); 
); 
} 
+0

我可能做这样的事情,但真正感兴趣的是为什么不能在jquery 1.4.2中正常工作的脚本在v1.5.1中工作:) – Allan 2011-03-14 15:22:03

0

为什么不使用这样的事情?

<script type="text/javascript" src="/jquery-1.5.1.js"></script> 
<script type="text/javascript" src="/[name of script].js"></script> 

您只需确保在定义使用它的任何函数之前包含jQuery文件。

+0

这不是我要求的;系统必须能够动态加载和启动模块。 – Allan 2011-03-14 15:08:08

0

从您发布的东西,好像你的代码有一定范围的问题。如果没有它是干什么用的情况下看到它很难说,因为变量module未在success & error回调定义什么是错的,但最有可能。所以我认为你应该检查在这两个回调中是否定义了module

此外,还可以节省的某个时候自己和使用$.getScript代替。

+0

范围界定? :)它甚至不会触发“成功”,它直接转到“错误”,所以任何范围都不应该是这里的原因。我应该补充一点,它从.jar文件加载脚本..但正如我前面提到的,它在jQuery v1.4.2中运行良好 – Allan 2011-03-14 17:00:12