2017-06-15 90 views
0

我有一個腳本這是一個獲取值從JSON陣列刷新JS腳本值每秒

<p id="ticker"></p> 


<script> 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
    myObj = JSON.parse(this.responseText); 
    document.getElementById("ticker").innerHTML = myObj.average; }; 
    xmlhttp.open("GET", "https://bitbay.net/API/Public/BTC/ticker.json", true); 
    xmlhttp.send(); 
</script> 

「平均」我的問題是使這個<p>刷新每隔幾秒鐘。我整天都在浪費時間去做這件事。你能幫我一下嗎?

+0

setIntervar(functionName,timeInMilliseconds)。在setInterval中寫入該函數。 –

+0

你可以簡單地將整個腳本包裝在'setInterval(function(){// SCRIPT},1000);'? *(1000 = 1秒,更改爲符合您的需要)* – Santi

+0

@blr,請參閱[我的更新回答](https://stackoverflow.com/a/44570752/4222181)以瞭解如何擺脫'parse '例外。 –

回答

0

,你可以這樣做:

<script> 
window.setInterval(function(){ 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
    myObj = JSON.parse(this.responseText); 
    document.getElementById("ticker").innerHTML = myObj.average; }; 
    xmlhttp.open("GET", "https://bitbay.net/API/Public/BTC/ticker.json", true); 
    xmlhttp.send(); 
}, 1000); 
</script> 

這將運行您的 「功能」 每秒(1000毫秒)。我建議你拋出此到另一個功能使得它更像是:

<script> 
window.setInterval(updateTicker(), 1000); 

function updateTicker(){ 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
     myObj = JSON.parse(this.responseText); 
     document.getElementById("ticker").innerHTML = myObj.average; 
    }; 
    xmlhttp.open("GET", "https://bitbay.net/API/Public/BTC/ticker.json", true); 
    xmlhttp.send(); 
} 
</script> 
-2
<p>Click the button to wait 3 seconds, then alert "Hello".</p> 
<p id="text">After clicking text will change here and count starts for every 0.5 seconds. This goes on forever...</p> 
<button onclick="myFunction()">Try it</button> 

<script> 
var i=0; 
function myFunction() { 

    setInterval(function(){ document.getElementById('text').innerHTML = i++; }, 500); 
} 
</script> 

</body> 
</html> 
+1

如果你只是舉例說明至少解釋什麼部分做什麼 – Luca

+0

@LucaKiebel我已爲此問題添加評論我認爲你沒有看到。 –

+0

那麼你至少應該引用自己的話。 – Luca

0

只需使用setInterval(()=>{//code }, time)重複獲得JSON。

setInterval(getAvg, 5*1000); // every 5 seconds 
 

 
function getAvg() { 
 
    var xmlhttp = new XMLHttpRequest(); 
 
    xmlhttp.onreadystatechange = function() { 
 
    myObj = JSON.parse(this.responseText); 
 
    document.getElementById("ticker").innerHTML = myObj.average; 
 
    }; 
 
    xmlhttp.open("GET", "https://bitbay.net/API/Public/BTC/ticker.json", true); 
 
    xmlhttp.send(); 
 
}
<p id="ticker"></p>

+0

@Santi right,thanks :) – Luca

0

一個簡單的setInterval應該做的伎倆。

<p id="ticker"></p> 

<script> 
    var ticker = document.getElementById("ticker"); // Cache that (faster) 

    function updateP(){ 
    //... Do whatever 
    ticker.innerHTML = "..." 
    } 

    updateP(); // Update once immediately... 
    setInterval(updateP, 3000) // ...and then again every 3000ms 
</script> 
0

可以使用setInterval()(其調用函數或以毫秒爲單位指定的時間間隔計算表達式)來實現這一點:

function getValue(){ 
 
    var xmlhttp = new XMLHttpRequest(); 
 
    xmlhttp.onreadystatechange = function() { 
 
    if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
 
     var myObj = JSON.parse(this.responseText); 
 
     document.getElementById("ticker").innerHTML = myObj.average; 
 
    } 
 
    }; 
 
    xmlhttp.open("GET", "https://bitbay.net/API/Public/BTC/ticker.json", true); 
 
    xmlhttp.send(); 
 
} 
 

 
setInterval(getValue, 1000);
<p id="ticker"></p>

UPDATE:以固定parse例外,我們應該process the response only if the request was successful