2014-01-23 35 views
0

我有一個本地AJAX請求,它將節點值插入到html div中。 如果我更改XML值並將其上傳到服務器,則在網站運行時,Chrome和IE將不會更新這些值(即使Shift-F5重新加載也無濟於事),並且Firefox會在一段時間後(而不是setInterval的1000ms)。XML文件上的Ajax請求

在HTML文件中的AJAX腳本是這樣的:

<script> 

    //----ANFANG AJAX REQUEST 

    function loadXMLDoc() 
    { 
    var xmlhttp; 
    var txt,x,i; 
    if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
     } 
    else 
     {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    xmlhttp.onreadystatechange=function() 
     { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
     xmlDoc=xmlhttp.responseXML; 
     txt=""; 
     x=xmlDoc.getElementsByTagName("Value"); 
      /* 
      for (i=0;i<x.length;i++) 
      { 
      txt=txt + x[i].childNodes[0].nodeValue + "<br>"; 
      } 
      */ 
     txt=x[0].childNodes[0].nodeValue; 
     document.getElementById("Eingabe_Web").innerHTML=txt;  
     txt=x[1].childNodes[0].nodeValue; 
     document.getElementById("differenzdruck").innerHTML=txt; 
     txt=x[2].childNodes[0].nodeValue; 
     document.getElementById("w1").innerHTML=txt; 
     txt=x[3].childNodes[0].nodeValue; 
     document.getElementById("w2").innerHTML=txt; 
     txt=x[4].childNodes[0].nodeValue; 
     document.getElementById("w3").innerHTML=txt; 
     txt=x[5].childNodes[0].nodeValue; 
     document.getElementById("w4").innerHTML=txt; 
     txt=x[6].childNodes[0].nodeValue; 
     document.getElementById("w5").innerHTML=txt; 
     txt=x[7].childNodes[0].nodeValue; 
     document.getElementById("w6").innerHTML=txt; 
     txt=x[8].childNodes[0].nodeValue; 
     document.getElementById("w7").innerHTML=txt; 
     txt=x[9].childNodes[0].nodeValue; 
     document.getElementById("w8").innerHTML=txt;  
     txt=x[10].childNodes[0].nodeValue; 
     document.getElementById("w9").innerHTML=txt; 
     } 
     } 
    xmlhttp.open("GET","einlesen.xml",true); 
    xmlhttp.send(); 
    document.getElementById("refresh").innerHTML = new Date().getTime(); 

    } 

    var refresh = window.setInterval("loadXMLDoc()",1000); 


    //----ENDE AJAX REQUEST 
    </script> 

的xml文件看起來是這樣的:

<Values> 
<Value><![CDATA[<img src="status-gruen:="Eingabe_Web":.png" style="width:35px;"/>]]></Value> 
<Value><![CDATA[:="Differenzdruck_Web":]]></Value> 
<Value><![CDATA[:="Abreinig_Beginn_Web":]]></Value> 
<Value>:="Abreinig_Ende_Web":</Value> 
<Value>:="Abreinig_Alarm_Web":</Value> 
<Value>:="Abreinig_Pause_Web":</Value> 
<Value>:="Abreinig_Offline_Web":</Value> 
<Value>:="Abreinig_Intervall_Web":</Value> 
<Value><![CDATA[<img src="status-gruen:="Ventilator_Web":.png" style="width:35px;"/>]]></Value> 
<Value><![CDATA[<img src="status-gruen:="Abreinigung_Web":.png" style="width:35px;">]]></Value> 
<Value><![CDATA[<img src="status-rot:="Alarm_Web":.png" style="width:35px;">]]> </Value> 
</Values> 

回答

1

瀏覽器cache可能導致此問題。添加一個隨機查詢(可能是時間戳)串到你的網址,以避免cache

xmlhttp.open("GET","einlesen.xml?q="+(new Date()).getTime()+"",true); 
+0

這wprks罰款。謝謝 – user2164882

1

您應該使用標準的伎倆,以防止抓取靜態文件的緩存版本。

例子:

var tstamp = new Date().getTime(); 
xmlhttp.open("GET","einlesen.xml?v="+tstamp,true); 
+0

另一個已經工作了,所以我沒有嘗試這個,但我也沒有降低這個。只是讓你知道。 – user2164882

+1

區別在於隨機可以輸出相同的數字(概率較低,但可能發生),而使用時間戳將始終是唯一的。我其實不在乎投票:) –

0

也許緩存導致此問題。在瀏覽器上嘗試一下祕密模式。確保你使用PC瀏覽器,但不能移動。

For chrome shortcut, CTRL + SHIFT + N 
For firefox shortcut, CTRL + SHIFT + P