代码之家  ›  专栏  ›  技术社区  ›  Alex Pacurar

使用Ajax调用同步加载JS文件,使用<script>标记加载JS文件

  •  0
  • Alex Pacurar  · 技术社区  · 15 年前
    core.js:
        var core = 
        {
            all:{},
            load: function(jsUrl)
            {
                $.ajaxStup({async, false});
                $.getScript(jsUrl);
            },
            init: function ()
            {
    
                $.getJSON('someurl', function(data)
                {
                    for(key in this.all)
                        alert(key);
    
                });
             },
             here: function(who)
             {
                 this.all[who.name] = who;
             }
        };
        $(document).ready(function()
        {
            core.init();
        });
    

    me.js 
        (function()
        {
            core.here({name:"me", foo:"bar"});
        })();     
    


    CASE 1:
        <script type="text/javascript" src="/jquery.js"></script>
        <script type="text/javascript" src="/core.js"></script>
        <script type="text/javascript"> 
            core.load("/me.js");
        </script>         
    

    CASE 2:
        <script type="text/javascript" src="/jquery.js"></script>
        <script type="text/javascript" src="/core.js"></script>
        <script type="text/javascript" src="/me.js"></script>
    

    问题是,对于案例1,我得到了一个警报,正如我应该得到的,但是对于案例2,没有警报… 所以问题是:标签有一个加载事件?或者我可以使用什么来同步文件来处理案例2(在IE8中调试时,我注意到使用断点可以解决问题)。我有什么东西不见了吗?

    1 回复  |  直到 15 年前
        1
  •  0
  •   Community Mohan Dere    9 年前

    我不知道为什么案例1正好适合你,但你的问题似乎就在这里:

    $.getJSON('someurl', function(data)
    {
        alert(core === this); // <----- false, 'this' refers to the function's scope
        for(key in this.all)
            alert(key);
    });
    

    JavaScript中的“这个”与C++或Java中的“这”不一样。

    问题是 function(data){...} 创建一个闭包(用一个新的)。所以,在函数内部, this 不再提及 core ,它引用从中调用它的上下文的范围(在本例中,在jquery内部的某个地方)。你可以通过 保护 用一个新的变量,就像这样。

    var self = this;
    $.getJSON('someurl', function(data) {
        for(var key in self.all){
            alert(key);
        }
    });
    

    This question 可以为您指明正确的方向,使 javascript中的关键字。