如何从javascript中的setInterval()调用php函数?

时间:2015-06-04 05:47:01

标签: javascript php

我想每隔10秒调用一次php函数,因为我使用的是javascript setInterval。任何人都可以协助语法。

2 个答案:

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