所以我有这些功能:
function UrlExists(url){
$.ajax({
url: url,
success: function(data){
alert('exists');
},
error: function(data){
alert('fail');
}
});
}
function addScript(filepath, callback){
if (filepath) {
var fileref = document.createElement('script');
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", filepath);
if (typeof fileref!="undefined")
document.getElementsByTagName("head")[0].appendChild(fileref);
}
if (callback) {
callback();
}
}
然后在我$(document).ready()
我有一堆这些:
addScript(roofPathMrtu.js);
addScript(roofPathTrtu.js);
addScript(lowerPathMrtu.js);
etc...
然后我需要检查它们是否成功加载,所以我打电话给:
UrlExists('roofPathMrtu.js');
问题是这个UrlExists函数不起作用,我认为这是因为它在所有addScript函数完成之前运行。
如何在完成所有addScript功能后才能运行我的UrlExists功能?我打算在最后一个上使用addScript函数的回调参数,但我不认为这会起作用。
答案 0 :(得分:1)
我一直这样做的方法不是使用setimeout()的javascript方法,而是使用jquery功能。如果没有,那么我会使用Que。语法是
$.when(function()).then(fucntion2());
or
$.when(function1()).done(function2());
如果您愿意,可以重叠这些,但在考虑代码的优雅和效率时,它不是最好的。使用$可能是下一步,使用$。时不会达到你想要的效果。
答案 1 :(得分:0)
你的addScript()函数正在将标记插入到dom中并立即返回。此时,浏览器仍需要获取src属性中指定的javascript文件。我想在执行addScript()函数之后但在浏览器有机会获取javascript文件之前调用UrlExists()。
答案 2 :(得分:0)
使用$ .Deferred对象“监听”各种已完成的事件。您可能希望组合一些$ .Deferred对象并使用$ .when函数来侦听多个已解析的promise http://thiswildorchid.com/jquery-progress-and-promises查看此链接可能有所帮助。但听起来你可能需要这个。它对异步函数有很大帮助,你应该看看它是否适合你。
答案 3 :(得分:0)
您要做的是在脚本元素上定义onload
函数。这并不难,但实施开始看起来很难看。对于您正在处理的特定问题,我建议您查看Require JS。