我在网络课程分配中坚持使用自动刷新功能。我总是这样写代码:
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,函数等,因此失败。 那么问题是,如果我的代码设计是这样的话,如何使我的数据自动刷新?
谢谢
答案 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秒返回一次。