3

我编写了一个运行良好的脚本,只是我希望添加一个定时循环。我是 Javascript 的新手,现在已经为此苦恼了几天,我希望专家可以帮助我....

我也只需要这个在 FireFox 中工作!

该脚本正在从 XML 中提取数据。如果在 XML 中找不到任何内容,则页面将正常显示。如果找到某些东西,它会创建一个弹出 div,显示找到的信息并播放音频文件。

如果通过调用外部 CSS 样式表在 XML 集中找不到任何内容,则弹出窗口只是一个可见性设置为隐藏的 div。如果找到某些东西,那么它会引用一个单独的样式表并播放和音频文件,并将 div 设置可见更改为 true。

我需要以某种方式添加一个循环,以便此脚本每 20-30 秒检查一次 XML 文件,如果发现某些内容,它将显示我隐藏的 DIV 并播放音频警报。该脚本功能齐全,除了我无法在不重新加载页面的情况下让脚本循环。

我也想将其保留在<head>标签中。

    <head>
    <script type="text/javascript">

    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.open("GET","xml/SearchRequest-11988N.xml",false);
    xmlhttp.send();
    xmlDoc=xmlhttp.responseXML;
    
    xtotaltickets=xmlDoc.getElementsByTagName("issue")[0].getAttributeNode("total");
    totaltickets=xtotaltickets.nodeValue;
    ytotaltickets=parseInt(totaltickets);
    
    if (ytotaltickets<1)
    {
    document.write("<link rel='stylesheet' type='text/css' href='notickets.css'>");
    }
    else
    {
      document.write("<link rel='stylesheet' type='text/css' href='newtickets.css'>");
      var audioElement = document.createElement('audio');
      audioElement.setAttribute('src', 'newticket.ogg');
      audioElement.play();
    }
    
    </script>

同样,我只需要它在 FireFox 中工作!

4

1 回答 1

2

将您的代码放在一个函数中并使用一个间隔:

<head>
<script type="text/javascript">

function refreshXml() {

    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.open("GET","xml/SearchRequest-11988N.xml",false);
    xmlhttp.send();
    xmlDoc=xmlhttp.responseXML;

    xtotaltickets=xmlDoc.getElementsByTagName("issue")[0].getAttributeNode("total");
    totaltickets=xtotaltickets.nodeValue;
    ytotaltickets=parseInt(totaltickets);

    if (ytotaltickets<1)
    {
    document.write("<link rel='stylesheet' type='text/css' href='notickets.css'>");
    }
    else
    {
      document.write("<link rel='stylesheet' type='text/css' href='newtickets.css'>");
      var audioElement = document.createElement('audio');
      audioElement.setAttribute('src', 'newticket.ogg');
      audioElement.play();
    }
}

setInterval(refreshXml, 20000);

</script>

您需要检查的其他一些事项:

  • 确保可以多次调用该函数而不会创建重复的内容。特别是,您应该在创建它们之前检查您需要的元素是否已经存在。

  • 为了确保代码在正确的时间运行,您可能需要监听 bodyonload事件。还可以考虑使用 jQuery,因为它会使代码更易于编写和维护。

于 2012-07-16T03:17:30.870 回答