【问题标题】:JavaScript - loading scripts orderJavaScript - 加载脚本顺序
【发布时间】:2013-06-10 11:41:42
【问题描述】:

我正在为 Android 操作系统开发一个 HTML+JavaScript 应用程序。在 HTML 页面中,我正在加载另一个具有以下代码的 JS 文件:

var Map = {};
$.getScript("cordova-2.6.0.js",function(){
Map['x'] = somthin
}

在 HTML 页面上,我正在循环浏览地图。问题是,在我的应用程序第一次加载时,一切正常。但是当我打开其他应用程序或只是返回然后我恢复我的应用程序时,地图的长度等于零。 (我认为这与HTML页面加载其依赖项的顺序有关,但我不知道如何解决这个问题......)
有什么建议么?谢谢!

编辑
我的 JSFile.js 中的 JS 代码:

var Map = {};
   $.getScript("cordova-2.6.0.js",function(){
        Map['X'] = 'hi';
  });

我在 HTML 页面中的 JS 代码:

<head>
<script src="JSFile.js"></script>
</head>
<body>



$(document).ready(function(){

        for(var i in Map)
        {
            alert(Map[i]);
        }
});
</body>

实际结果是,在第一次加载应用程序时,一切正常 - 我收到“嗨”警报。但是当应用程序恢复时 - 我什么也没得到。

【问题讨论】:

  • 如果你像这样添加 Map['x'] = somthg ,那么 length 总是为零
  • 这只是一个例子,我通过 for(var j in Map) 循环它并在循环语句中增加一个计数器
  • 显示循环播放的方式和时间

标签: javascript jquery getscript


【解决方案1】:

将 JSFile.js 中的代码放到 $(document).ready 函数中,如下所示:

var Map = {};
$(document).ready(function(){
   $.getScript("cordova-2.6.0.js",function(){
        Map['X'] = 'hi';
        for(var i in Map)
        {
            alert(Map[i]);
        }
  });
});

记住 $.getScript 是异步的,所以如果你这样调用它,它不会起作用:

$(document).ready(function(){
    var Map = {};
       $.getScript("cordova-2.6.0.js",function(){
            Map['X'] = 'hi';
      });
    //Will not work because the response may not arrive yet
    for(var i in Map)
            {
                alert(Map[i]);
            }
    });

【讨论】:

  • 这正是我的问题——如何强制 $.getScript 在 for 循环之前执行。
【解决方案2】:

在页面的 onload 事件中添加该代码。这样当该页面经历加载事件时将调用此代码

【讨论】:

  • 我必须在 onload 中放入哪些代码? $.getscript...?
  • $(function(){ var Map = {}; $.getScript("cordova-2.6.0.js",function(){ Map['x'] = somthin } });
  • $(document).ready(function() { // .ready() 的处理程序被调用。});相当于调用: $(function() { // .ready() 的处理程序被调用。});
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2013-06-20
  • 1970-01-01
相关资源
最近更新 更多