好的,这是我正在与之抗争的问题。我有这个代码(简称):
var initializeZasilkovna = function () {
// Initialize object
window.packetery.initialize();
};
// Check if the object doesnt exist
if (!window.packetery) {
// It doesnt exists. Download it.
$.ajax({
url: document.location.protocol + "//www.zasilkovna.cz/api/v2/4854erws856w4efs/branch.js",
dataType: "script",
cache: true
}).done(function () {
// After download is complete initialize it.
initializeZasilkovna();
});
} else {
// It exists only initialize it.
initializeZasilkovna();
}
这最终导致错误“window.packetery”未定义。
问题是我想在某些事件上加载远程脚本,因为它太大了。下载后我想调用它的内容。
问题是.done()函数不会等待脚本完全加载并过早触发初始化。是不是.done()函数应该等待?当我添加setTimeout时,它可以正常工作。什么可能是错的家伙?
有趣的是,我在前端有相同的代码,并且工作正常。我还没弄清楚出了什么问题。任何建议表示赞赏谢谢!
答案 0 :(得分:2)
正如你所看到的那样in the documentation(我的):
成功回拨
加载脚本后会触发回调但不会 必须执行。
AFAIK除了将回调添加到脚本本身之外,没有办法保证脚本已被执行。
常见的解决方法是使用* 1
,尽管这不是100%万无一失,但是由浏览器的JS引擎来支持它。
答案 1 :(得分:-1)
您可以传递一个包含回调函数的success
$.ajax({
url:...
....
success: function(res){
//callback
}
});