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

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

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

【问题讨论】:

标签: javascript ajax timeout


【解决方案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); .. 除了它应该可以工作(我做了一个非常不同的版本,它使用相同的原理工作)。
    • 两者都有效,您可以在此处阅读最佳答案:stackoverflow.com/questions/6081560/… 无论如何,我分享的想法不仅仅是一个现成的代码。随意更改它:) 干得好!
    • 公平。顺便说一句,我给你做了标记,因为我同意这个想法是合理的。我不知道谁最初将你标记为降级(没有评论),但至少你现在回到了零。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    相关资源
    最近更新 更多