我只是在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进行操作的建议。 谢谢大家。
答案 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);
}