当前位置: 首页 > 面试题库 >

Chrome的加载指示器在XMLHttpRequest期间保持旋转

邵赞
2023-03-14
问题内容

我正在编写一个使用Comet / Long Polling保持Web页面最新的AJAX
Web应用程序,我注意到在Chrome中,它将页面视为始终处于加载状态(选项卡的图标不断旋转)。

我认为这对于Google Chrome + Ajax来说是正常的,因为即使Google Wave也有这种行为。

好吧,今天我注意到Google Wave不再保持加载图标旋转,有人知道他们是如何解决的吗?

这是我的ajax通话代码

var xmlHttpReq = false;
// Mozilla/Safari
if (window.XMLHttpRequest) {
   xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
   xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttpReq.open('GET', myURL, true);
xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlHttpReq.onreadystatechange = function() {
   if (xmlHttpReq.readyState == 4) {
      updatePage(xmlHttpReq.responseText);
   }
}
xmlHttpReq.send(null);

问题答案:

我无耻地偷了Oleg的测试用例,并对其进行了一些调整以模拟长轮询。

load.html

<!DOCTYPE html>
<head>
  <title>Demonstration of the jQery.load problem</title>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script>
  jQuery(document).ready(function() {
    $('#main').load("test.php");
  });
  </script>
</head>
<body>
  <div id='main'></div>
</body>
</html>

test.php

<?php
  sleep(5);
?>
<b>OK!</b>

结果很有趣:在Firefox和Opera中,在XMLHTTPRequests中没有显示加载指示器。Chrome让它旋转…我怀疑GoogleWave不再使用长时间轮询(例如,每隔X秒轮询一次,以节省资源),但是由于没有帐户,我无法对其进行测试

编辑: 并且我弄清楚了:在加载中添加了一点延迟之后test.php,该延迟可以尽可能小,在加载后加载指示器停止load.html

jQuery(document).ready(function() {
  setTimeout(function () {
    $('#main').load("test.php");
  }, 0);
});

正如对另一个答案的评论所证实的那样,当浏览器重新获得控制权以完成页面渲染时,指示器会停止旋转。另一个优点是不能通过按来中止请求Esc



 类似资料:
  • 更新:原来这是由于Chrome中的一个bug造成的。我仍在寻找解决办法。 我试图通过在元素上设置来在Chrome中使用延迟加载。我还使用以下方法来调整图像: 不幸的是,在图像实际加载之前显示的图像占位符在Chrome中有一个方形纵横比。它不遵循元素的/属性中设置的纵横比。这在以下情况下发生: 仅在Chrome中(不在Firefox 75中,Firefox 75也支持延迟加载)。 有没有一种解决方案

  • 预加载 Modal 用来提示一些后台活动(像Ajax请求)和阻止在这个活动期间的任何用户操作。 打开预加载 modal 我们也需要调用适当的App方法: $.show预加载([title])- 显示 预加载 modal title - string. Optional. 预加载 modal 标题. 默认(没有指定)的时候,它等同于 "Loading...". 你可以在App初始化时通过 modal

  • 问题内容: 我正在尝试捕获表单的“提交”按钮,如果表单已提交,页面将刷新,并显示一些隐藏的字段。我想捕获表单是否已经提交过,以及是否在重新加载时提交,我想取消隐藏隐藏字段。我试图使用全局变量来实现此目的,但是我无法使其正常运行。 这是我尝试过的: 关于此代码有什么问题的任何建议? 问题答案: 由于HTTP是无状态的,因此每次加载页面时,它将使用JavaScript中设置的初始值。您不能在JS中设置

  • 嗨,我在google page espeed中面临这个问题,我几乎把我的网站速度提高到100,唯一剩下的就是 我已经在使用字体显示:swap;那为什么这不能解决我的问题呢。 这是我的外部字体css 我用这个命令生成了这个css npx本地网络字体https://fonts.googleapis.com/css?family=MiriamLibre:400700/Users/admin/Docume

  • 问题内容: 为了使IM Client始终保持登录状态,Facebook通过在将页面插入文档之前使用AJAX加载页面来避免整个页面加载。 但是,在Facebook AJAX请求期间,浏览器似乎正在加载。重新加载按钮变为X,浏览器中内置的进度指示器指示正在加载/正在等待等) 我已经能够成功实现基于AJAX的导航,但是我的浏览器没有显示任何加载迹象(由于请求是异步的),Facebook如何做到这一点?

  • 我试图动态地将值加载到我的旋转器中,但是在这里我得到一个错误“this,android.r.layout.simple_spinner_item,colors”错误是: 错误:(109,52)错误:找不到合适的ArrayAdapter(GuestListFragment,int,String[])构造函数ArrayAdapter。ArrayAdapter(Context,int,int)不适用(参