【问题标题】:Loading in Javascript在 Javascript 中加载
【发布时间】:2017-06-23 23:21:17
【问题描述】:

我有一个看起来像这样的 Javascript 函数...

function loadInventory() {
  var json = [<?php echo $_SESSION['inventory']; ?>];

  for(var i = 0; i < json.length; i++) {
    var obj = json[i];
    for(var key in obj.rgDescriptions) {
      document.getElementById('userInventory').innerHTML += '<div class="col-sm-4"><div style="background-color: #2e2e2e;">'+obj.rgDescriptions[key].market_hash_name+'</div></div>';
      document.getElementById('loader').classList.remove('loader');
    }
  }
}

显然,完成此功能需要几秒钟,这不是问题。

但是,我想在运行该函数之前完全加载页面,因为页面有一个加载动画,一旦添加了 HTML,它就会在 loadInventory() 中删除。

我试过这样做......

$(document).ready(function() {
  $(window).load(function() {
    loadInventory();
  });
});

但它似乎不太好用。该函数在页面完全加载之前运行,因此您看不到加载动画。

结论:

我想完全加载页面。完成后,我想运行loadInventory(),它将向页面添加更多 HTML。

对不起,乱七八糟,真的很难解释!

【问题讨论】:

  • 等等...这条线在做什么? var json = [&lt;?php echo $_SESSION['inventory']; ?&gt;];
  • 这是存储 JSON 的一种非常糟糕的方式。 :P
  • 它只是在我的控制台中抛出unexpected token 错误。这到底是怎么回事?

标签: javascript json load loading


【解决方案1】:

使用setTimeout() 延迟运行函数。

$(document).ready(function() {
    setTimeout(loadInventory, 1);
});

由于setTimeout通过事件循环异步运行该函数,所以在加载页面的所有同步动作完成之前不会被调用。

【讨论】:

  • 这只会每毫秒运行一次函数,不是吗?不是我想要做的。
  • 我的意思是setTimeout,我修好了。
  • 值得注意的是,只要调用堆栈为空并且自调用setTimeout 函数起至少经过一毫秒,该函数就会运行。这就是这里使用setTimeout 的原因(我想)。
  • 这似乎工作得很好。但是,这是一种安全的方式吗?
  • 浏览器在运行时不会响应。没有一个简单的方法可以解决这个问题。
【解决方案2】:

您是否刚刚尝试删除 $(window).load 部分? .load 在 jQuery 1.8 中已弃用。

【讨论】:

  • 那将在页面完全加载之前运行该函数,这意味着我看不到加载动画。
  • 您将代码放在哪里?如果你把它放在页面底部而不是顶部,就在
猜你喜欢
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2013-06-05
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多