【问题标题】:Execute code if page doesn't load如果页面未加载,则执行代码
【发布时间】:2013-05-08 00:32:25
【问题描述】:

我想创建一个代码,每 10 秒重新加载一次页面的一部分,如果重新加载失败(由于连接问题),它会播放声音。

使用 ajax 可以实现这样的事情吗?如何实现?我以前在网络聊天中看到过这种类型的功能,但从未遇到过它的代码。

【问题讨论】:

  • 您是在询问 ajax 请求失败,还是实际页面无法加载?
  • 不是初始页面,而是 ajax 请求失败。但是,如果存在连接问题,ajax 函数会失败,这一点很重要。
  • 您是否在使用任何 Javascript 框架,例如 jQuery,或者您是否使用 XmlHttpRequest 进行此操作?
  • 是的,我正在使用最新版本的 jQuery。

标签: javascript html ajax connection reload


【解决方案1】:

尝试使用 setInterval 函数:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=windows-1250">
        <title>Test</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" type="text/css">
        <script src="http://code.jquery.com/jquery-1.9.1.js" type="text/javascript" language="JavaScript"></script>
        <style type="text/css">
        <!--
          .square {
              background-color: #AAAAAA;
              width: 250px;
              height: 100px;
          }
        //-->
        </style>
<script type="text/javascript" language="JavaScript">
  $(document).on('ready',function(){
    setInterval(updateDiv,10000);
  });

  function updateDiv(){
    $.ajax({
      url: 'getContent.php',
      success: function(data){
        $('.square').html(data);
      },
      error: function(){
        //Code to play a sound
        $('.square').html('<span style="color:red">Connection problems</span>');
      }
    });
  }
</script>
</head>
<body>
  <h1>The next div will be updated every 10 seconds</h1>
  <div class="square">
    Hello
  </div>
</body>
</html>

还有php脚本:

<?php
  echo "Updated value --> " . rand();
?>

要测试,请尝试重命名 php 脚本(模拟连接问题)并重命名为原始名称(getContent.php)以再次测试正确的情况。希望这会有所帮助。

【讨论】:

  • 很好的答案,我稍后会对此进行测试,只是最后一个请求。你能给我一个简单的代码来播放一个短的 WAV 文件吗?也许您可以使用此代码更新您的答案?
  • @GaryWoods 我发现 ogg 格式最适合跨浏览器支持网页声音。如果你不需要跨浏览器支持,你可以使用 wav,但我相信 ogg 是 html5 标准。
  • 加里,播放声音是另一个巨大的挑战!这值得向论坛提出另一个问题。试试这个(在我看来是最完整的):Sound Manager
【解决方案2】:

使用 JQuery,您可以添加处理程序以在失败时运行...

$.ajax({
  dataType: "json",
  url: "myurl.com"
}).done(function( data ) {
    //do what you want when it's all good
}).fail(function() {
    //do what you want when the call fails
});

或者你可以这样做......

$.ajax({
    type: "post", 
    url: "/SomeController/SomeAction",
    success: function (data, text) {
        //do what you want when it's all good
    },
    error: function (request, status, error) {
         //do what you want when the call fails
    }
});

对于每个请求,这里是一个jsfiddle,它每 2 秒调用一次服务,使用将返回日期的 URL,或者使用将失败的错误 URL,模仿失败的服务器。

更新:我修改了 jsfiddle 以播放声音,只要该声音保留在它所在的服务器上 :)

【讨论】:

  • 您能否在您的答案中添加一个 jsfiddle.net 来证明这一点?理想情况下,它每 10 秒刷新一次,并在刷新失败时播放声音。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2013-03-31
相关资源
最近更新 更多