javascript опрашивает php скрипт каждые 5 секунд

#javascript #php

#javascript #php

Вопрос:

Как мне проверить значение в php скрипте на предмет изменения с помощью javascript?

Я хотел бы сделать что-то вроде:

 <script type="text/javascript"><!--
var innitialID = get_file_contents(lastPresentID.php); //get_file_contents(lastPresentID.php);

function myTimeout() {
    var freshestID = get_file_contents(lastPresentID.php);
    if(freshestID != innitialID) {
            location.reload();
        }
  setTimeout(myTimeout, 5000);
}
window.onload = myTimeout;
</script>
  

php скрипт генерирует единственное целое число, которое является последним идентификатором таблицы.

Спасибо!

Комментарии:

1. get_file_contents не является функцией JavaScript

2. Что делает функция get_file_contents? Является ли это функцией js с вызовом ajax?

3. Хорошо, но знаете ли вы, как заменить им реальный javascript? Я хотел бы узнать, как это сделать правильно

4. Вы хотите посмотреть на что-то под названием AJAX

5. @CorCool: AJAX является частью JavaScript. Это также именно то, о чем вы нас просите. В вашей книге по JavaScript это должно быть описано; какой из них вы используете?

Ответ №1:

 <script type="text/javascript">
    window.onload = doAjax(true);
    setInterval(doAjax, 5000);

    var initialID = -1, freshestID;

    function doAjax(initial) {
      var xmlhttp;
      if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest(); // code for IE7 , Firefox, Chrome, Opera, Safari
      } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); // code for IE6, IE5
      }

      xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 amp;amp; xmlhttp.status == 200){
           if(initial) {
               initialID = xmlhttp.responseText;
           } else {
               freshestID = xmlhttp.responseText;
               if (initialID != freshestID)
                   location.reload();
           }                   
        }
      }

      xmlhttp.open("GET", "lastPresentID.php", true);
      xmlhttp.send();
    }
</script>
  

Вот так, обновлены вызовы ajax. Сначала устанавливает переменную initialId, затем каждые 5 секунд запускается интервальный код, который обновляет переменную freshestId и выполняет сравнение.

РЕДАКТИРОВАТЬ: код теперь не дублируется.

Комментарии:

1. 1. Массовое дублирование кода. 2. Удалите свой старый неправильный ответ.

2. @AshleyMedway 1. OP не использует никакой библиотеки ajax, поэтому немного дублированного кода на чистом javascript может помочь ему чему-то научиться. 2. Есть комментарии к предыдущему ответу, которые могут быть полезны для понимания этого ответа. 3. Если вы не собираетесь быть конструктивным, прекратите троллить 🙂

3. Я веду себя очень конструктивно, вам не нужна библиотека AJAX для написания кода, который не дублируется. Смотрите: jsfiddle.net/FDyf8

4. @AshleyMedway — это не работает, ваш код не имеет возможности узнать, какую переменную он обновляет. Вы просто предупреждаете их, но не устанавливаете oldvar и newvar, их нельзя сравнивать. Для оператора, который надеялся изучить какой-нибудь рабочий JS, все вернулось на круги своя.

5. @Husman Я попробовал этот код внизу моей страницы. Пока это не работает. Но это намного сложнее, чем я ожидал … вау.

Ответ №2:

Приведенный ниже код при загрузке будет присваиваться oldVal . Затем использование setInterval будет обновляться newVal каждые 5 секунд и проверять, newVal != oldVal .

Он получает значения от lastPresentID.php использования AJAX.

 var oldVal = 0;
var newVal = 0;

function loadXMLDoc(old) {
    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 == 4 ) {
           if(xmlhttp.status == 200){
               if(old)
               {
                   oldVal = xmlhttp.responseText;
               }
               else
               {
                   newVal = xmlhttp.responseText;

                   if(newVal != oldVal)
                       alert("test");
               }                   
           }
           else if(xmlhttp.status == 400) {
              alert('There was an error 400')
           }
           else {
               alert(xmlhttp.status)
           }
        }
    }

    xmlhttp.open("GET", "lastPresentID.php", true);
    xmlhttp.send();
}

function timeout() {
    loadXMLDoc(false);
}

loadXMLDoc(true);
setInterval(timeout, 5000);