小编典典

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

ajax

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

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

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

阅读 377

收藏
2020-07-26

共1个答案

小编典典

几个问题:您可以将超时阈值与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秒,但是无法 取消 请求。

我认为您可能不走运。

2020-07-26