#javascript #php #html #jquery #ajax
#javascript #php #HTML #jquery #ajax
Вопрос:
У меня есть две страницы php. page.php и loader.php . Loader.php извлекает данные из mysql для заполнения индикатора выполнения и page.php содержит функцию для обновления loader.php каждую секунду. Это работает, но довольно уродливо, потому что вы можете видеть, как анимация css сбрасывается каждую секунду.
Я бы предпочел иметь панель загрузки html в page.php вместе со всем другим HTML для моей страницы, но А) как мне получить переменные из loader.php в page.php и Б) как мне обновить div (или любой объект) на page.php без обновления страницы?
Я посмотрел на AJAX, который, похоже, может делать то, что я хочу, но я новичок в AJAX и программировании в целом. Я уже горжусь тем, что он (в некоторой степени) работает с самого начала.
page.php
<script>
var myTimer = null;
//executes a script that fills mysql with data
function fileExec() {
$.ajax({
url:"fileexec.php",
type: "post"
});
startRefresh();
}
//Shows progress bar
function refreshData() {
$('#container').load('loader.php');
}
function stopRefresh() {
clearInterval(myTimer);
}
function startRefresh() {
myTimer = setInterval(refreshData, 1000);
}
</script>
loader.php
<?php
//Code not shown sets up connection to mysql to pull progress
$progress1 = $row['progress'];
$script1 = $row['script'];
//Stop refresh after shell script has finished
if ($script1 == "stop") {
echo "<script>";
echo "stopRefresh();";
echo "</script>";
}
?>
//Update progress bar with variable
<html>
<body>
<div class="progress-bar-wrapper">
<div class="progress-bar">
<div id="myBar" class="progress-bar-fill in-progress" style="height:10px;width:<?php echo $progress1; ?>%"></div>
</div>
</div>
</body>
</html>
Комментарии:
1. Просто верните значение в php, а не в HTML. Затем сделайте что-то вроде
function refreshData() { $.post("loader.php",function(data) { $('#myBar').width(data); })
2. Как мне указать, из каких переменных извлекать loader.php ? У меня несколько переменных. Я предполагаю, что последняя часть кода обновляет div с новым значением.
Ответ №1:
Обновите его с помощью js:
$.post("loader.php", {
function: "getProgress"
}, function(data) {
progress = JSON.parse(data);
//use progress to change your bar with js
});
И в php:
switch ($_POST['function']) {
case 'getProgress':
getProgress();
break;
}
function getProgress() {
//get the progress state
echo json_encode($progress);
}
Комментарии:
1. Мне пришлось объявить $ progress как глобальную переменную и использовать только echo globalvar вместе с кодом @mplungjan для обновления div, чтобы заставить его работать. Возможно ли выполнить другое действие, кроме просто echo? Я попытался добавить свое условие для запуска stopRefresh(), но это не сработало. Есть ли какой-либо способ, которым я могу запустить функцию на page.php соответствует ли прогресс или скрипт определенному значению из той же части ajax?
2. Да, как показано выше функцией: «getProgress» в js и переключателем ($_POST[‘function’]) { case ‘getProgress’: getProgress(); break; } в php
3. Вы имеете в виду добавить еще одну функцию ниже getProgress(); поэтому в случае ‘getProgress’: getProgress; getSomeOtherFunction; break;?
4. О, извините, я неправильно прочитал ваш вопрос. Да, просто проверьте значение и добавьте другой вызов функции внутри getProgress(), как в обычном PHP.