Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery ajax.done()函数启动太早?_Javascript_Jquery_Ajax - Fatal编程技术网

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,不,如果连接(移动)或网站速度慢,它就不能工作。重点应该放在原始文档中。很高兴您看到了隐藏在页面中间的那条小行,它完全改变了函数的预期行为。