2015-06-04 3 views
0

Я хочу вызвать функцию php через каждые 10 секунд, для этого я использую javascript setInterval. может ли кто-нибудь помочь в синтаксисе.как я могу вызвать функцию php из setInterval() в javascript?

+0

использование Ajax для достижения этой цели ... –

+0

Используйте setInterval (AjaxcalltoMethod, 10000) – AkshayJ

ответ

0

Скажем, у вас есть script.php, где вы запускаете свою функцию 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.

+0

Как вызвать функцию PHP через ajax, пожалуйста, помогите. – anish

+0

Я не рекомендую это делать. Если сервер не будет выполнен до того, как мы его вызываем, мы прервем серверный процесс. – mplungjan

+0

@mplungjan Поднимает хорошую точку, поэтому я бы просто установил переменную, пока вы ожидаете ответа, и установите ее, когда вы получаете ответ. Если переменная выключена, ничего не делайте. – nico

4

Нельзя использовать setInterval для вызова процесса сервера. Возможно, сервер не завершил работу, когда получил следующий вызов, и до того, как он что-то вернет.

Поскольку у нас есть Ajax, мы можем использовать обратный вызов для повторного вызова.

Например в JQuery - техника будет то же самое в readystate изменения в XMLHttpRequest в

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(); 
} 
+0

OP не упомянул о jQuery в своем вопросе, но это правильный ответ. Можете ли вы объяснить, почему это не прерывает сервер, пожалуйста? Похоже, у них будет такое же поведение. – nico

+1

Он не будет звонить снова, пока после успешного возвращения с сервера. Я использую jQuery для краткости, но setTimeout можно использовать без изменения внутри успешного события readystatechange в простом JS – mplungjan

+1

Хорошо имеет смысл, хороший ответ. – nico

Смежные вопросы