Как прекратить использовать функцию onload (), чтобы избежать потери вывода PHP при обновлении страницы?

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

file.js

function showMe(){
$.ajax({
type: "POST",
url: "output.php",
cache: false,
data: "action=showMessage",
success: function(html){
$("#container").html(html);
}
});

return false;
}

index.php

<!DOCTYPE html>
<head>
<script src="https://code.jquery.com/jquery-3.1.1.js"></script>
<script type="text/javascript" src="file.js"></script>
</head>
<body onload="showMe();">
<div id="container"></div>
<form id="myForm"></form>
</body>
</html>

output.php

  if ($action=="showMessage")
{
$query="SELECT * FROM `comm` ORDER BY id ASC";
$result = mysqli_query($conn,$query);

if (isset($_REQUEST['parentId'])) {
$parentId = $_REQUEST['parentId'];
}
else { $parentId = 0; }

$i=0;  $my = array();
while ($row = mysqli_fetch_row($result)){
$my[$i] = $row; $i++;
}
tree($my, 0, $parentId);
}

function tree($Array, $lvl, $ansId, $pid = 0)
{   $parentId = $ansId;

foreach($Array as $item)
{
if ($item[1] == $pid)
{  ?>
<div style="margin-left:<?php echo($lvl*40); ?>px">
<p><?php echo($item[3]); ?></p>
<?php
if ($lvl<=4){ echo '<a href="javascript:" onclick="OneComment('.$item[0].');">Reply</a>'; }
?> </div> <?php
tree($Array, $lvl+1,$parentId, $item[0]);
}
}
}
?>

1

Решение

Одно из решений состоит в том, чтобы код JavaScript установил cookie, а затем код PHP, который выполняет проверку HTML, чтобы увидеть, установлен ли этот cookie.

Например, когда форма отправлена ​​(при условии, что она вызывает showMe() функция и останавливает форму для отправки вручную с .Отправить()), установите cookie с document.cookie:

$('#myForm').submit(function(submitEvent) {
//Store cookie, which can be accessed via PHP on next page-load
document.cookie = 'formSubmitted=1';
showMe();
return false;//don't submit form
});

Затем, когда index.php перезагружается, проверьте наличие этого файла cookie, используя суперглобальный переменная $ _COOKIE:

if (isset($_COOKIE['formSubmitted'])  && $_COOKIE['formSubmitted']==1) {
//output the messsages (in the div with id="container"), using the code from output.php
//perhaps abstracting that code into a common function that can be used
//in both places
}

Смотрите пример этого в это phpfiddle. Имейте в виду, что phpFiddle разрешает только один php-скрипт в скрипте, поэтому код в output.php нужно было перемещать в верхнюю часть этого PHP-скрипта и запускать только при наличии данных POST (например, из запроса AJAX). В противном случае код в файлах может храниться отдельно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]