2012-07-10 51 views
3

我有一個HTML讀取XML使用jQuery/JavaScript的每5秒

的index.html:

<html> 

<head> 
    <title>Facebook</title> 

    <script type="text/javascript" src="../xdata/js/jquery.js"></script> 
</head> 

<body> 
    Tasks (<span id="tasks">0</span>) 
    Messages (<span id="messages">0</span>) 
    Notifications (<span id="notifications">0</span>) 


    <script type="text/javascript"> 
    $(document).ready(function() { 
    var pagetitle = document.title; 
    document.title = pagetitle+' NEW NOTIFICATON'; 
    }); 
    </script> 
</body> 

</html> 

和xml文件

page.xml:

<?xml version="1.0" ?> 
<page tasks="1" messages="3" notifications="3"/> 

我如何使每5秒index.html閱讀page.xml並修改標題,如在faceboook(「(1 )Facebook),並修改任務,消息,通知...

我在閱讀XML時遇到問題。如果有人能幫助我?

PS - 我喜歡jQuery的...但JavaScript的工作以及

+2

使用'setInterval'並設置時間爲5秒。然後調用其中的各種功能,這些功能將做你想要的。 – 2012-07-10 20:27:57

回答

2

以下是以jQuery的做,雖然你與您的xml文件有輕微的錯誤,導致解析問題。

假設你的XML文件是這樣的:

<?xml version="1.0"?> 
<data> 
    <page tasks="1" messages="3" notifications="3"/> 
</data> 

下面的代碼將相應地修改頁面,當然使用jQuery的:

$(document).ready(function() { 
    function get_info() { 
     $.ajax({ 
      type: "GET", 
      url: "page.xml", 
      dataType: "xml", 
      cache: false, 
      complete: function(doc) { 
       var tasks = $(doc.responseText).find("page").attr("tasks"); 
       var msgs = $(doc.responseText).find("page").attr("messages"); 
       var notes = $(doc.responseText).find("page").attr("notifications"); 
       if (tasks != $('#tasks').text() || 
        msgs != $('#messages').text() || 
        notes != $('#notifications').text()) { 
        document.title = "Facebook" + ' NEW NOTIFICATON'; 
       } 
       $('#tasks').text(tasks); 
       $('#messages').text(msgs); 
       $('#notifications').text(notes); 
      } 
     }); 

    } 
    setInterval(function() { 
     get_info(); 
    }, 5000); 
}); 

我花了一些時間來開發這個,我知道它的工作原理。

+0

,你能相信它不適用於Chrome嗎?在ff作品.. – Master345 2012-07-10 22:17:02

+0

@RowMinds我在鉻上測試它,你想我告訴你它的工作的屏幕截圖?你遇到了什麼錯誤? – Daedalus 2012-07-10 22:18:45

+0

我沒有得到一個錯誤,只是不會工作,你有調試的想法?或者只是我的電腦? – Master345 2012-07-10 22:21:01

0

把你的邏輯的setTimeout方法調用的內部:

setTimeout(function(){ 
    alert('I am displayed after 3 seconds!'); 
}, 3000); 
+0

Do * NOT *將字符串傳遞給'setTimeout'!它使用'eval'。傳遞函數。 'setTimeout(function(){alert('I will be 3 seconds!');},3000);' – 2012-07-10 21:22:03

+0

對不起,懶得抓住這個例子:http://www.w3schools.com/jsref/met_win_settimeout .asp的。如上所述,使用匿名函數:-) – RhinoWalrus 2012-07-10 21:26:02

0
var tid = setTimeout(function_name, 5000); 

function function_name() { 
    // do some stuff... 
    tid = setTimeout(function_name, 5000); // repeat 
} 
function abortTimer() { // to stop the timer 
    clearTimeout(tid); 
} 
+4

應該是'setInterval(function_name,5000);' – 2012-07-10 20:29:02

+0

var increment = 2; \t \t功能FNAME() \t \t { \t \t \t增量=增量+ 1; \t \t \t alert('qq'); \t \t} \t \t \t \t的setInterval(FNAME,1000); – Master345 2012-07-10 20:41:54

+0

爲什麼這不起作用? – Master345 2012-07-10 20:42:14

0
Try this: 
    (document).ready(function() { 
     function getPage() { 
      var page= $.ajax({ 
       type: "GET", 
       url: "page.xml", 
       dataType: "xml", 
       async : false, 
      }).responseXML; 
     $(page).find('page').each(function(){ 
     var tasks = $(this).attr("tasks"); 
     var msgs = $(this).attr("messages"); 
     var notes = $(this).attr("notifications"); 
     $('#tasks').html(tasks); 
     $('#messages').html(msgs); 
     $('#notifications').html(notes); 
     }); 
    } 
}); 
    setInterval(getPage,5000);