jQuery ajax .done()函数炒得太早了?

时间:2016-01-12 15:30:04

标签: javascript jquery ajax

好的,这是我正在与之抗争的问题。我有这个代码(简称):

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时,它可以正常工作。什么可能是错的家伙?

有趣的是,我在前端有相同的代码,并且工作正常。我还没弄清楚出了什么问题。任何建议表示赞赏谢谢!

2 个答案:

答案 0 :(得分:2)

正如你所看到的那样in the documentation(我的):

  

成功回拨

     

加载脚本后会触发回调但不会   必须执行

AFAIK除了将回调添加到脚本本身之外,没有办法保证脚本已被执行。

常见的解决方法是使用* 1,尽管这不是100%万无一失,但是由浏览器的JS引擎来支持它。

答案 1 :(得分:-1)

您可以传递一个包含回调函数的success

$.ajax({
    url:...
    ....
    success: function(res){
        //callback
    }
 });