在PHP和AJAX中自动刷新div

时间:2019-11-08 18:34:39

标签: php jquery ajax

我在网络课程分配中坚持使用自动刷新功能。我总是这样写代码:

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中创建了How do i auto refresh my div class content?。由于在自动刷新div元素之前放置了一些php变量,样式,js,函数等,因此失败。 那么问题是,如果我的代码设计是这样的话,如何使我的数据自动刷新?

谢谢

1 个答案:

答案 0 :(得分:1)

我认为您应该做一些事情来解决这个问题,但是主要的问题是您的功能:

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秒返回一次。