2016-08-16 76 views
0

的API顯示實時值和變化很頻繁,所以我想打個電話每秒,並顯示該網頁。API調用Ajax的n秒GET請求

我試過一個GET請求調用使用set_interval()每N秒,但該值加載只有一次,不要再打電話。

<p id="val"></p> 
<p id="val2"></p> 
<p id="val3"></p> 

<script> 
var xhttp = new window.XMLHttpRequest(); 
xhttp.open("GET", "http_url_link", true); 
xhttp.send(); 
xhttp.onreadystatechange = myFunction(xhttp); 

function myFunction() { 
    if (xhttp.readyState == 4) { 
     var xmlDoc = xhttp.responseXML; 
     var val1= xmlDoc.getElementsByTagName('value_1')[0].childNodes[0]; 
     var val2 = xmlDoc.getElementsByTagName('value_2')[0].childNodes[0]; 
     var val3 = xmlDoc.getElementsByTagName('value_3')[0].childNodes[0]; 
     document.getElementById('val3').innerHTML = 
     v3.nodeValue; 
     document.getElementById('val').innerHTML = 
     v1.nodeValue; 
     document.getElementById('val2').innerHTML = 
     v2.nodeValue; 
    } 
} 
myFunction(); 
setInterval(myFunction, (1000)); 
</script> 

回答

1

var xhttp = new window.XMLHttpRequest();

這裏xhttp對象創建一次當運行腳本,你會得到正確的輸出一次。所以你需要在1秒後調用它。

function myFunction() { 
    var xhttp = new window.XMLHttpRequest(); 
    xhttp.open("GET", "http_url_link", true); 
    xhttp.send(); 
    xhttp.onreadystatechange = function(){ 
     if (xhttp.readyState == 4) { 
     var xmlDoc = xhttp.responseXML; 
     var val1=xmlDoc.getElementsByTagName('value_1'[0].childNodes[0]; 
     var val2 = xmlDoc.getElementsByTagName('value_2')[0].childNodes[0]; 
     var val3 = xmlDoc.getElementsByTagName('value_3')[0].childNodes[0]; 
     document.getElementById('val3').innerHTML=v3.nodeValue; 
     document.getElementById('val').innerHTML=v1.nodeValue; 
     document.getElementById('val2').innerHTML=v2.nodeValue; 
    } 
    } 

setInterval(myFunction,(2000)); 

編碼愉快:)

+0

現在我堅持CORS問題。我似乎得到一個錯誤'沒有訪問控制'。我在網上嘗試了所有不同的解決方案。在Javascript中添加header()作爲php。但沒有運氣。你知道如何排序CORS問題的上述相同的代碼?它奇怪的一個獲取請求的作品,但對於多個它顯示CORS問題 –

0

試試這個:

function myFunction() { 
    function foo(){ alert("Hello"); } 
    setTimeout(myFunction, 1000); 
    foo(); 
} 
myFunction(); 
0

的代碼使API調用函數外。

function myFunction() 
{ 
    var xhttp = new window.XMLHttpRequest(); 
    xhttp.open("GET", "http_url_link", true); 
    xhttp.send(); 
    xhttp.onreadystatechange = myFunctionRes(xhttp); 
} 
function myFunctionRes() 
{ 
    if (xhttp.readyState == 4) 
    { 
     var xmlDoc = xhttp.responseXML; 
     var val1= xmlDoc.getElementsByTagName('value_1')[0].childNodes[0]; 
     var val2 = xmlDoc.getElementsByTagName('value_2')[0].childNodes[0]; 
     var val3 = xmlDoc.getElementsByTagName('value_3')[0].childNodes[0]; 
     document.getElementById('val3').innerHTML = 
     v3.nodeValue; 
     document.getElementById('val').innerHTML = 
     v1.nodeValue; 
     document.getElementById('val2').innerHTML = 
     v2.nodeValue; 
    } 
} 
setInterval(myFunction, (1000)); 
+0

如果我把這4條線裏面的功能,它只是崩潰我的瀏覽器。它得到過載。我不知道如何解決這個問題:/ –

+0

那是因爲setInterval的繼續執行,指定的持續時間後。 你應該做的,使用的setTimeout讓另一個API調用時,第一個API調用結束和在處理的響應。 – AmanSinghal

+0

回調怎麼樣? (請不要讓JavaScript神殺我說) –