简体   繁体   English

每秒刷新JS脚本值

[英]Refresh JS script value every second

I have a script which is a getting value "average" from JSON array 我有一个脚本,它是从JSON数组中获取“平均值”的值

<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>

My problem is making this <p> refresh every some seconds. 我的问题是使此<p>每隔几秒钟刷新一次。 I wasted all day to do this. 我整天都在浪费时间这样做。 Could you please help me with it? 你能帮我吗?

Can you do this: 你能做这个吗:

<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>

This runs your "function" every second (1000 milliseconds). 这每秒(1000毫秒)运行一次“功能”。 I advice you to throw this into another function making it more like: 我建议您将其放入另一个函数中,使其更像:

<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>

Simply use setInterval(()=>{//code }, time) to repeat getting the JSON. 只需使用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> 

A simple setInterval should do the trick. 一个简单的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>

You can use setInterval() (which calls a function or evaluates an expression at specified intervals in milliseconds) to achieve this: 您可以使用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: to fix the parse exception we should process the response only if the request was successful . 更新:要解决parse异常,我们在请求成功时处理响应

<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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM