ajax调用后,全局变量变为未定义

时间:2015-06-05 23:27:25

标签: javascript ajax

在html页面中我有一些js代码,它在$(window).load中加载一个名为cartjs的js文件,如下所示:

<script>
  //var cart = {};
  var loadJsAsync = {
    load: function(sourceUrl, id) {
      var js, fjs = document.getElementsByTagName('script')[0];
      var that = this;
      if (document.getElementById(id)) {
        that.callbacks.forEach(function (fn, index) {
          console.log(fn, index);
          fn();
        });
        return;
      }
      js = document.createElement('script');
      js.type = 'text/javascript';
      js.ansyc = true;
      js.id = id;
      js.src = sourceUrl;
      fjs.parentNode.insertBefore(js, fjs);
      $('#' + id).on('load', function() {
        that.callbacks.forEach(function (fn, index) {
          console.log(fn, index);
          fn();
        });
      });    
    },
    callbacks: []
  };

  $(window).load(function () {
    loadJsAsync.load("<%= ScriptSourceUrl %>", 'cartjs');
  });
</script>

回调是我将函数依赖于cartjs中定义的对象购物车的地方。当我刷新整个页面时,一切都很好,并且没有依赖性问题。

当触发ajax调用以部分更新页面中的某些数据时,#cartjs脚本标记仍然存在,而购物车对象将变为未定义且代码

 if(document.getElementById(id)) {
     that.callbacks.forEach(function (fn, index) {
         console.log(fn, index);
         fn();
     });
     return;
 }

也会抱怨购物车对象未定义。

但是,如果我在loadJsAsync之前通过删除第一行中的注释来定义全局购物车对象,则刷新后购物车对象将不再是未定义的,并且依赖功能将不再抱怨。

有谁知道如何解释它?

0 个答案:

没有答案