Автоматическое обновление div в PHP и AJAX - PullRequest
0 голосов
/ 08 ноября 2019

Я застрял с моей функцией автоматического обновления в моем назначении веб-курса. Я всегда ставлю свой код так:

navigation.php:

<html>
   <head>
     .... ALL STYLE AND JS .....
   </head>
   <body>
      <div class="menu">
          ...... ALL MY WEB MENU .......
      </div>

index.php:

<?php
  include "navigation.php";
  function A(){
    global $variable_functionA;
    .... FUNCTION TO CALL API X BY cURL .....
  }
  function B(){
    global $variable_functionB;
    .... FUNCTION TO CALL API Y BY cURL .....
  }
?>
<div class="container">
    ...... MY WEB CONTAINER ........
    <div class="auto_refresh">
       <?php
           include "auto_refresh_data.php"; //Success when first load, failed to load style, js, etc at the second load
       ?>
    </div>
</div>
<?php
  include "footer.php";
?>

footer.php:

     </body>
 </html>
 <scrpt>..... ALL MY JS SCRIPT.....</script>

Мой код Ajax:

<script>
setInterval(function(){
    $.ajax({
        url:'auto_refresh_data.php'
    }).done(
        function(data){
            $('.auto_refresh').html(data);
        });
},5000);
</script>

auto_refresh_data.php:

<div class="style">
  <?php
   function A($variable1);
   function B($variable2);

  ... OPERATION FOR GLOBAL VARIBLE RESULT FROM function A and function B ....
  ?>
</div>

Я хочу сделать автоматическое обновление данных в середине моего контейнера. Затем я сделал это в ajax так: Как мне автоматически обновить содержимое моего класса div? . Это не удалось из-за некоторой переменной php, стиля, js, функции и т. Д., Помещенных перед элементом div автоматического обновления. Итак, вопрос в том, как сделать так, чтобы мои данные автоматически обновлялись, если мой дизайн кода такой?

Спасибо

1 Ответ

1 голос
/ 09 ноября 2019

Я думаю, что есть пара вещей, которые вы должны сделать, чтобы исправить это, но главная проблема заключается в ваших функциях:

1) Переместите ваши функции куда-нибудь еще, как в свои собственные файлы:

/ functions.php

<?php
function A()
{
    global $variable_functionA;
    .... FUNCTION TO CALL API X BY cURL .....
}

function B()
{
    global $variable_functionB;
    .... FUNCTION TO CALL API Y BY cURL .....
}

2) Включите функции в основной файл, где они используются при загрузке:

/ index.php

<?php
include("functions.php");
include("navigation.php");
?>
<div class="container">
    ...... MY WEB CONTAINER ........
    <div class="auto_refresh">
       <?php include("auto_refresh_data.php") ?>
    </div>
</div>
<?php include("footer.php") ?>

3) На странице auto_refresh_data.php вам необходимо снова включить функции, но использовать include_once вместо include, чтобы не получить ошибку объявления:

<?php include_once("functions.php") ?>

<div class="style">
  <?php
  # Presumably you want to run these functions?
  A();
  B();

  ... OPERATION FOR GLOBAL VARIBLE RESULT FROM function A and function B ....
  ?>
</div>

4) Поскольку вы не делаете с ajax ничего особенного, я бы просто использовал .load():

<script>
$(function() {
    setInterval(function(){
        $('.auto_refresh').load('auto_refresh_data.php');
    },5000);
});
</script>

В дополнение к этому, я бы, вероятно, посмотрел на использование setTimeout() рекурсивно против setInterval() только потому, что если вы получили задержку ответа, вы можете получить эти ответы вне времени. Использование setTimeout сработает после возврата ответа, а не каждые 5 секунд, независимо от того, возвращен ответ или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...