如何为加载已关闭的外部 javascript 文件设置超时

Posted

技术标签:

【中文标题】如何为加载已关闭的外部 javascript 文件设置超时【英文标题】:How to set a timeout for loading a external javascript file which is down 【发布时间】:2011-07-27 06:12:55 【问题描述】:

我正在使用 javascript 来包含从另一台服务器上的 php 文件提供的一些内容。然而,这个其他服务有时会变得不稳定,要么需要很长时间才能加载,要么根本不会加载。

在 JS 中是否有办法在失败并停止包含 js 之前尝试在 x 秒内获取外部数据。

【问题讨论】:

***.com/questions/1018705/…的可能重复 可能不会。我认为这是一个 JSONP 类型的问题 您希望请求等待 N 秒,还是对资源进行 N 次尝试? 【参考方案1】:

如果你的意思是

<script src="javascript.php"></script>

那么简短的回答是否定的,这就是 JSONP 在这些情况下没有用处的原因。

更长的答案是,您可以使用 setTimeout 并测试您知道应该在 javascript 中的变量,如果 var/function 不存在则给出错误。

如果你这样做

<script>
var start = new Date();
var tId;
function testFunction() 
  var end = new Date();
  if ( (end.getTime()-start.getTime()) > 10000) 
    alert('gave up')
  
  else if (someFunction)  // someFuntion in the external JS
    someFunction()
  
  else tId=setTimeout(testFunction,1000)

</script>

<script src="javascript.php"></script>

【讨论】:

【参考方案2】:
<script type="text/javascript">
var jsLoaded = false;
setTimeout("callback()", 2000);
function callback() 
    if (!jsLoaded) 
        alert("Javascript not loaded after 2 seconds!");
     else 
        alert('Loaded');
    

</script>
<script type="text/javascript" id="foo" src="url.js" onload="jsLoaded=true"></script>

现在,祝你好运找到停止加载脚本的方法。我已尝试从 DOM 中删除 &lt;script&gt; 元素,但它仍在尝试加载...

如果你的 .js 托管在同一个域上,我建议你使用 AJAX 方法来加载 javascript(见http://codesnippets.joyent.com/posts/show/602)

【讨论】:

setTimeout("callback()", 2000); ????我认为您的意思是 setTimeout(callback, 2000); .. 除了它应该可以工作(我做了一个非常不同的版本,它使用相同的原理工作)。 两者都有效,您可以在此处阅读最佳答案:***.com/questions/6081560/… 无论如何,我分享的想法不仅仅是一个现成的代码。随意更改它:) 干得好! 公平。顺便说一句,我给你做了标记,因为我同意这个想法是合理的。我不知道谁最初将你标记为降级(没有评论),但至少你现在回到了零。

以上是关于如何为加载已关闭的外部 javascript 文件设置超时的主要内容,如果未能解决你的问题,请参考以下文章

如何为给定的javascript生成调用图? [关闭]

将社交媒体的外部 Javascript 加载到网页中的目的 [关闭]

如何为外部 url 正确设置 Next image loader url

如何为 YouTube 视频添加启动画面/占位符图像 [关闭]

如何为外部字体请求设置 AWS Cloudfront 缓存?

在 DataBricks 中,如何为变量分配来自外部文件的字符串值?