我正在使用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级浏览器)。
XMLHttpRequest
otherserver.com
如果脚本引入了任何种类的全局名称(例如,任何变量名称,函数名称等),您都可以尝试对其setTimeout进行检查:
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秒,但是无法 取消 请求。
<script>
我认为您可能不走运。