Javascript jQuery ajax.done()函数启动太早?
好的,这是一个我正在努力解决的问题。我有以下代码(简化):Javascript jQuery ajax.done()函数启动太早?,javascript,jquery,ajax,Javascript,Jquery,Ajax,好的,这是一个我正在努力解决的问题。我有以下代码(简化): var initializeZasilkovna=函数(){ //初始化对象 window.packetery.initialize(); }; //检查对象是否不存在 如果(!window.packetery){ //它不存在。请下载它。 $.ajax({ url:document.location.protocol+“//www.zasilkovna.cz/api/v2/4854erws856w4efs/branch.js”, 数
var initializeZasilkovna=函数(){
//初始化对象
window.packetery.initialize();
};
//检查对象是否不存在
如果(!window.packetery){
//它不存在。请下载它。
$.ajax({
url:document.location.protocol+“//www.zasilkovna.cz/api/v2/4854erws856w4efs/branch.js”,
数据类型:“脚本”,
缓存:真
}).done(函数(){
//下载完成后,初始化它。
初始化ezasilkovna();
});
}否则{
//它只存在并初始化它。
初始化ezasilkovna();
}
您可以传递一个包含回调函数的success
$.ajax({
url:...
....
success: function(res){
//callback
}
});
如你所见(我的):
成功回调
加载脚本后将触发回调,但不会
必须执行
好吧,除了将回调添加到脚本本身之外,没有办法保证脚本已经执行
常见的解决方法是使用
setTimeout(initializeZasilkovna,0)
尽管这并不是100%的万无一失,但这取决于浏览器的JS引擎来遵守它。创建一个setInterval检查,重复检查它是否存在,例如,在ajax请求完成后每100毫秒检查一次。一旦间隔可用,请清除间隔。这不是最干净的解决方案,但它在每个浏览器中都能工作。@KevinB,不,如果连接(移动)或网站速度慢,它就不能工作。重点应该放在原始文档中。很高兴您看到了隐藏在页面中间的那条小行,它完全改变了函数的预期行为。