Javascript区间循环卡住

时间:2015-09-21 22:39:46

标签: javascript jquery html iframe

我写了一个Javascript间隔循环,它只是粘在运行部件上,除非我点击停止它的按钮。

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>JScript Loop</title>


  <script type="text/javascript" src="data.json"></script>
  <script type='text/javascript'>//<![CDATA[
  window.onload=function(){
  var stop = false;
  var go = false;
  var obj = document.getElementById("btn").addEventListener("click", function () {
      stop = true;
  });
  var obj = document.getElementById("btn2").addEventListener("click", function () {
      stop = false;
  });

  var interval;

  function loop() {
      var result = document.getElementById("result");
      var layout = document.getElementById("layout");

      if (!stop) {
          result.innerHTML = "Running...";      
      } else {
          result.innerHTML = "Stopped...";
      }
  }
  interval = setInterval(loop, 500);


      var result2 = document.getElementById("result2");
      do{
      var mydata = JSON.parse(data);    
        result2.innerHTML = mydata[0].name;
      }while(stop);


  }//]]> 

  </script>

  </head>
  <body>
    <p id="result"></p>
  <button id="btn">Stop</button>
  <button id="btn2">Start</button>
  <p id="result2"></p>
  </body>

  </html>

我希望完成的是mydata[0].namedata.json内更新。文件,它将发出停止变为false并重新加载页面。

基本上,整个代码是从iframe源的数据文件加载变量,因此如果数据文件没有更改,它会为iframe保持相同的src,但是如果mydata[0].name变量发生更改后,页面将重新加载并将新src加载到iframe中。

我在过去的几个小时里一直坚持这一点,并且无法将它整合到我需要用来修复它的地方。

更新9/25/2015代码更改

<html>
<head>
<title></title>
<script src="jquery.min.js"></script>
</head>
<body>  
<script>
$.ajaxSetup({ cache: false });
function loadChirp(){ //start function
var ThePath;
   $.getJSON("http://127.0.0.1/data.json", 
        function(data){
            var CurPath = data.path;
            var ChkPath = data.path;
            display('Cur Path is: ' + CurPath);
        }); 
} //end function 

function tick(CurPath, ChkPath) {
    var CurPath = CurPath;  
    $.getJSON("http://127.0.0.1/data.json", 
        function(data2){
            display('Cur Path is: ' + CurPath);
            var ChkPath = data2.path;
            if(ChkPath !== CurPath) {
                var ChkPath = data2.path;
                var CurPath = data2.path;
                display('ChkPath is: ' + ChkPath);
            }

        });
}       
function display(msg) {
    var p = document.createElement('p');
    p.innerHTML = msg;
    document.body.appendChild(p);
}
$(document).ready(function(){ 
var CurPath;
var ThePath;
//DOCUMENT READY FUNCTION
loadChirp();
setInterval(tick, 30000); // Set for 1 Minute to use 1 hour its 3600000
}); 
//DOCUMENT READY FUNCTION 

</script>  
</body>
</html> 

1 个答案:

答案 0 :(得分:0)

data.json文件只会在页面加载时加载一次。

它不会在页面的生命周期内刷新自己。 因此,var mydata = JSON.parse(data);将始终是从内存中提取的相同数据,而不是从服务器

如果您要查找该文件的更新,则需要使用ajax再次检索数据并在ajax完成回调中检查它。

至于间隔停止,除了单击按钮外,代码中没有任何内容可以停止。

while(stop)将创建无限循环竞争条件。摆脱它!

任何进一步的帮助都很困难,因为你想要实现的目标并不是很清楚