2012-07-16 36 views
3

我已经写了一个脚本,完美工作,除了我希望添加一个定时循环。我是新来的JavaScript和几个日子,我已经敲了我的头,我希望专家能帮助我....请帮助循环一个JavaScript事件

此外,我只需要这个工作在FireFox!

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

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

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

我想保留在标签中。

<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中工作!

+0

你看过setInterval了吗? – Michael 2012-07-16 03:16:15

回答

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> 

一些其他的东西,你需要检查:

  • 确保功能可以在不产生多次调用重复的内容。特别是,你应该在创建它们之前检查你需要的元素是否已经存在。

  • 为了确保代码在正确的时间运行,您可能需要收听正文onload事件。另外考虑使用jQuery,因为它会使代码更容易编写和维护。

+1

你也应该在函数开头删除样式表我猜 – naveen 2012-07-16 03:21:31

+1

@naveen,是的,我猜他需要做一些重构,这就是为什么我建议它在创建它之前检查一个元素是否存在。 – 2012-07-16 03:24:12

+0

谢谢,我得到它的工作! 我不得不改变一些东西,但你的评论导致我的解决方案! 我不是在页面内解析XML,而是将它作为一个外部html,并使用iframe和css样式赋予其与我所寻求的相同的美学。 然后,而不是更改CSS,我使用您的修改后的代码设置一个JavaScript可见属性的iframe。 另外我没有脚本运行在头标签了。它的工作原理与我想要的一样,谢谢你的帮助! 我发布明天使用的代码。由于我是一个新成员,stackoverflow需要我等待8小时才能发布答案 – user1527799 2012-07-16 05:03:25