我想每隔10秒调用一次php函数,因为我使用的是javascript setInterval。任何人都可以协助语法。
答案 0 :(得分:4)
使用setInterval调用服务器进程绝不是一个好主意。服务器在下次调用时以及返回之前可能还没有完成工作。
由于我们有Ajax,我们可以使用回调来重新发出呼叫。
例如在jQuery中 - 该技术在XMLHttpRequest的readystate更改中是相同的
function callServer() {
$.get("myserverprocess.php",function(data) {
$("#somecontainer").html(data);
setTimeout(callServer,10000);
});
}
注意:如果失败,上述内容将不再尝试。如果您需要再试一次,请使用此
function callServer() {
$.ajax({
url: "myserverprocess.php",
type: 'get'
})
.done(function(data) {
$("#somecontainer").html(data);
})
.always(function() {
setTimeout(callServer,10000);
})
.fail(function() {
$("#somecontainer").html("Error");
});
}
简单的JS:
function callServer() {
var x = new XMLHttpRequest();
x.open("GET", "myserverprocess.php", true);
x.onreadystatechange = function() {
if (x.readyState==4 && x.status==200) { // remove status test to keep calling
document.getElementById("someontainer").innerHTML=x.responseText
setTimeout(callServer,10000);
}
x.send();
}
答案 1 :(得分:0)
假设您有运行PHP函数的script.php。客户方:
var working = false;
setInterval(ajaxCall, 10000); //10000 MS == 10 seconds
function ajaxCall() {
if(working)
return;
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == XMLHttpRequest.DONE ) {
working = false;
if(xmlhttp.status == 200){
console.log(xmlhttp.responseText);
}
}
}
xmlhttp.open("POST", "script.php", true);
xmlhttp.send();
working = true;
}
请参阅重复的问题(我在上面的代码中使用了上述代码):how do you set interval to ajax call in jquery [closed]和jQuery-less AJAX call。