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

通过javascript加载缓慢的外部文件时,有什么方法可以优雅地实施超时限制?

宋翔
2023-03-14
问题内容

我正在使用javascript来包含从另一台服务器上的php文件提供的某些内容。但是,该其他服务有时会变得不稳定,并且加载时间较长或根本无法加载。

JS中是否有一种方法可以尝试在x秒钟内获取外部数据,然后失败并显示“请重试”消息?

<script type="text/javascript" src="htp://otherserver.com/myscript.php"></script>

问题答案:

几个问题:您可以将超时阈值与XMLHttpRequest(aka ajax)一起使用,但是由于存在超时阈值,因此由于Same Origin
Policy限制
otherserver.com您不能使用XMLHttpRequest(并支持所有A级浏览器)。

如果脚本引入了任何种类的全局名称(例如,任何变量名称,函数名称等),您都可以尝试对其setTimeout进行检查:

var TIMELIMIT = 5; // seconds until timeout
var start = new Date;

setTimeout(function() {
  // check for something introduced by your external script.
  // A variable, namespace or function name here is adequate:
  var scriptIncluded = 'otherServerVariable' in window;

  if(!scriptIncluded) {
    if ((new Date - start) / 1000 >= TIMELIMIT) {
      // timed out
      alert("Please try again")
    }
    else {
      // keep waiting...
      setTimeout(arguments.callee, 100)
    }
  }
}, 100)

我所看到的问题是您无法取消对脚本的请求。如果我错了<script>,请有人纠正我,但是从DOM中删除仍然会使浏览器对资源的请求处于活动状态。因此,尽管您可以
检测 到脚本加载时间超过x秒,但是无法 取消 请求。

我认为您可能不走运。



 类似资料:
  • 问题内容: 根据设计,每次运行新测试时,Selenium都会为您的Firefox配置文件创建一个新副本。我发现此复制时间是一个相当大的瓶颈,尤其是在运行100多个测试时。(5-15秒以重新复制配置文件)。 有谁知道有任何超越行为吗?我希望我的Selenium服务器只重用相同的firefox配置文件。我知道这违反了“干净地设置您的测试装置”的理念,但这是我愿意采取的捷径,因为我的测试不会实质性地改变

  • 问题内容: 我正在处理一个将文件附加到电子邮件的PHP表单,并试图妥善处理上传的文件太大的情况。 我了解到,其中有两个设置会影响文件上传的最大大小:和。 如果文件的大小超过,PHP会将文件的大小返回为0。我可以检查一下。 但是,如果超出了范围,我的脚本将以静默方式失败并返回空白表格。 有什么办法可以捕捉到此错误? 问题答案: 从文档中: 如果发布数据的大小大于post_max_size,则 $ _

  • 我有一个JAX-RS资源类。它调用一个加载实体的无状态EJB(我们称之为)。 与另一个实体具有关系(我们称之为),并且配置为具有的提取类型。 任何东西上都不会出现额外的事务性注释,因此无状态EJB的默认行为是在必要时启动事务,并在事务的业务方法完成后提交事务。 在调试器中,我观察到EJB返回的将作为的值,正如我所怀疑的那样。因此,惰性加载工作良好。 然后,我的资源类构建一个并将控制权交给JAX-R

  • 我是DP的初学者,我正在尝试解决一个Leetcode问题-最大子数组:给定一个整数数组nums,找到具有最大和的连续子数组(至少包含一个数字),并返回其和。我知道这个问题已经有很多DP解决方案。但我想自己写一个DP解决方案,我在网上搜索了一些关于DP的介绍。以下是我使用的具体参考资料:https://stackoverflow.com/a/13538715/9982458.根据该答案,DP的运行时

  • 我的主要活动是片段,其中一个片段是Map Fragment。现在,当我点击那里时,每次它都会慢慢打开。我正在使用fragment的单例实例,但它仍然不能像预期的那样工作。下面是这门课的一个好例子:

  • 我在我的嵌套scrollview中有recyckerview,当我的recrenegerview加载时,我对滚动没有问题,它非常平滑,但它的加载速度非常慢(它不是关于我的数据或网络)慢行是 当我从nestedscrollview(根元素的第一个子元素)中移动回收器视图时,它真的很快。这是我的xml 对于这个xml,它阻塞ui 3-4秒并加载它,但是如果我将recyclerview放在nesteds