有没有办法在服务器不可用时更快地使请求超时?我通过脚本标签请求一个文件,该标签在 21 秒后超时,此时页面尝试在没有它的情况下构建。服务器关闭时,请求的状态代码为 502:错误的网关。
我正在从已启动且运行良好的服务器向暂时处于初出茅庐状态的服务器发出请求。正常请求如下所示:
<script language="JavaScript" src="...someFileOnTheDownServer..."></script>
当请求尝试加载文件时,我的主页面的加载会阻止并等待不会提供的文件。
我可以异步加载文件,但这也会显示为"正在加载"状态,直到 21 秒过去。我宁愿在尝试检索文件时只等待 2-5 秒。
这个问题看起来很相似,但我认为 5 年后应该有更好的选择、更多关于这个主题的问题,或者在我指定的延迟时使<script>
标签超时的真正解决方案。
我在脚本标签的 MDN 上还没有看到timeout
属性。有人对HTML5async
属性有很好的体验吗?我宁愿不无限期地使用async
,因为我希望体验加载此文件,然后呈现页面......只是不要等待21 秒来做!
更新
为了使异步成为一个选项,需要有一种方法仅在加载请求的文件后立即执行一些特定于页面的javascript代码。
我测试了async
属性,并且(对于兼容的浏览器)页面呈现而不会阻止和等待文件。但是,我需要一些特定于页面的代码在页面加载后运行,而不是在加载之前运行。这个答案似乎提供了一个解决方案,但我的首选答案是关于能够以指定的时间间隔使脚本加载超时。
也许你可以使用 ajax 请求。
$.holdReady( true );
function getScr (timeout) {
jQuery.ajax({
url: "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.2/moment.min.js",
dataType: "script",
cache: true,
error: function(x, t, m){
if(t==="timeout") {
console.log("got timeout");
} else {
console.log(t);
}
$.holdReady( false );
},
success: function(){
console.log( "added" );
$('#date').text(moment().format("dddd, MMMM Do YYYY, h:mm:ss a"));
$.holdReady( false );
},
timeout: timeout
})}
getScr(3000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
Date : <div id="date"></div>
http://api.jquery.com/jQuery.holdReady/