Ajax,为什么setInterval函数不起作用?

时间:2015-09-01 10:21:58

标签: javascript php ajax

我只是在localhost中有一个json页面,我将这个页面的数据保存在一个文件中,我需要每隔5秒保存一次这个页面,所以我在ajax中开发了这个代码,使用带有exec命令的php页面,我使用setinterval函数进行更新,但我的代码只执行一次函数getRequest。 这里是html:

<script type="text/javascript">
    // handles the click event for link 1, sends the query
  function getOutput() {
    setInterval(function(){
 getRequest(
      'prova1.php', // URL for the PHP file
       drawOutput,  // handle successful request
       drawError    // handle error
  );
  return false;
  },3000);
}  
// handles drawing an error message
function drawError() {
    var container = document.getElementById('output');
    container.innerHTML = 'Bummer: there was an error!';
}
// handles the response, adds the html
function drawOutput(responseText) {
    var container = document.getElementById('output');
    container.innerHTML = responseText;
}
// helper function for cross-browser request object
function getRequest(url, success, error) {
    var req = false;
    try{
        // most browsers
        req = new XMLHttpRequest();
    } catch (e){
        // IE
        try{
            req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            // try an older version
            try{
                req = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                return false;
            }
        }
    }
    if (!req) return false;
    if (typeof success != 'function') success = function () {};
    if (typeof error!= 'function') error = function () {};
    req.onreadystatechange = function(){
        if(req.readyState == 4) {
            return req.status === 200 ? 
                success(req.responseText) : error(req.status);
        }
    }
    req.open("GET", url, true);
    req.send(null);
    return req;
}
</script>

这里是php页面:

<?php
  exec(" wget http://127.0.0.1:8082/Canvases/Fe0_Cbc1_Calibration/root.json -O provami3.json", $output);
  echo 'ok';
?>

我是php,javascript ajax等的新手,我正在学习它,我知道也许有一个简单的方法使用jQuery但是现在我正在学习Ajax,所以我想要使用Ajax进行操作的建议。 谢谢大家。

3 个答案:

答案 0 :(得分:1)

你有没有调用过getOutput()函数?我看不到它......

您的代码的工作示例:http://jsfiddle.net/v9xf1jsw/2/

我最后只添加了这个:

getOutput();

编辑: 将getOutput调用的工作示例调用到链接:http://jsfiddle.net/v9xf1jsw/8/

答案 1 :(得分:0)

JS很好,请参阅此处计算循环https://jsfiddle.net/tk9kfdna/1/

的示例
req.timeout = 2000; // two seconds

假设你在某处调用了getOutput(),因为原来的问题中没有包含它,如果不是这样的话。否则可能发生的事情是来自prova1.acp的响应永远不会被接收,因此脚本看起来像是不起作用。 XMLHttpRequest请求的默认超时为0,这意味着它将永远运行,除非您指定超时。

尝试添加

来设置更短的超时时间
if

可能与prova1.php存在问题?当你独立尝试时,prova1.php运行正常。

答案 2 :(得分:-1)

1)在setInterval方法结束时返回false,我不相信这是必要的。

2)使用全局变量来存储setInterval(这也会为你提供取消setInterval的选项)。

var myInterval;
function getOutput() {
    myInterval = setInterval(function(){
 getRequest(
      'prova1.php', // URL for the PHP file
       drawOutput,  // handle successful request
       drawError    // handle error
  );
  },3000);
}