Javascript 在一组其他函数完成后调用一个函数
我得到了这些函数:Javascript 在一组其他函数完成后调用一个函数,javascript,jquery,Javascript,Jquery,我得到了这些函数: function UrlExists(url){ $.ajax({ url: url, success: function(data){ alert('exists'); }, error: function(data){ alert('fail'); } }); } function addScript(filepath, callback){ if (fi
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函数的callback参数,但我认为这行不通。您的addScript()函数正在将标记插入dom并立即返回。此时,浏览器仍然需要获取src属性中指定的javascript文件。我假设UrleExists()是在执行addScript()函数之后,但在浏览器有机会获取javascript文件之前被调用的。您的addScript()函数正在将标记插入dom并立即返回。此时,浏览器仍然需要获取src属性中指定的javascript文件。我假设UrleExists()是在执行addScript()函数之后,但在浏览器有机会获取javascript文件之前被调用的。使用$.Deferred对象“侦听”各种已完成事件。您可能需要组合一些$.Deferred对象,并使用$.when函数侦听多个已解析的承诺
查看此链接可能会有所帮助。但听起来你可能需要这个。它对异步函数有很大帮助,您应该看看它是否适合您 使用$.Deferred对象“侦听”各种已完成事件。您可能需要组合一些$.Deferred对象,并使用$.when函数侦听多个已解析的承诺
查看此链接可能会有所帮助。但听起来你可能需要这个。它对异步函数有很大帮助,您应该看看它是否适合您 您要做的是在script元素上定义一个
onload
函数。这并不难,但是实现开始看起来很糟糕。对于您正在处理的特定问题,我建议您查看。您要做的是在script元素上定义一个onload
函数。这并不难,但是实现开始看起来很糟糕。对于您正在处理的特定问题,我建议您看看。我一直在做的一种方法不是使用setimeout()的javascript方法,而是在需要时使用jquery功能。如果不是的话,我会用一个Que。语法是
$.when(function()).then(fucntion2());
or
$.when(function1()).done(function2());
如果愿意的话,您可以重叠这些代码,但考虑到代码的优雅性和效率,这并不是最好的。使用que可能是下一步,使用$.when将无法实现您想要的功能
我这样做的一种方式不是使用setimeout()的javascript方法,而是在需要时使用jquery特性。如果不是的话,我会用一个Que。语法是
$.when(function()).then(fucntion2());
or
$.when(function1()).done(function2());
如果愿意的话,您可以重叠这些代码,但考虑到代码的优雅性和效率,这并不是最好的。使用que可能是下一步,使用$.when将无法实现您想要的功能
你在使用jQuery,那么为什么要复制他们的?@zzzzBov因为有很多事情我以前从未听说过:)如果你要的话,也可以。你在使用jQuery,那么为什么要复制他们的?@zzzzBov因为有很多事情我以前从未听说过:)如果你要的话。