我一直在使用这段脚本将外部.js文件加载到文档中:
$.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 :(得分:0)
为什么不使用这样的东西?
<script type="text/javascript" src="/jquery-1.5.1.js"></script>
<script type="text/javascript" src="/[name of script].js"></script>
在定义使用它的任何函数之前,您只需要确保包含jQuery文件。
答案 1 :(得分:0)
您可以使用$ .ajax()中的'complete'事件而不是'success'事件吗?
如果您需要动态加载javascript源文件,可以将[script]标记附加到[head]标记:
$("head").append(
unescape('%3Cscript src="/path/to/javascript.js"%3E%3C/script%3E');
);
唯一的问题是,您必须阻止脚本多次加载。
我喜欢有一个if()条件来测试我知道在动态加载的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');
);
}
答案 2 :(得分:0)
根据您发布的内容,您的代码似乎有一些范围问题。如果没有看到它在什么情况下被使用,很难确切地说出错误,但很可能是因为module
&amp;中没有定义变量success
。 error
回调。所以我认为你应该检查这两个回调中是否定义了module
。
此外,您可以保留一段时间并改为使用$.getScript。