Perdiodyczne pobieranie dancyh z DB w skrypcie JS i wyświetlanie na www.

0

Cześć to znowu ja, wybaczcie za moje pytania.

Chcę periodycznie pobierać dane z Mysql i wyświetlać na HTML.
Do odświerzania urzywam JS.
Tak to wygląda.

<html>
<head>
<title>Auto refresh</title>
</head>
<body>

<div id="id"></div>
<div id="val1"></div>
<div id="val2"></div>
<div id="txt"></div>

<script type="text/javascript" src="jquery-3.2.1.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
//$('#val1').load('load.txt');
//document.getElementById("val1").innerHTML = 5 + 6 + 138;
refresh();
});

function refresh()
{
	setTimeout(function()
	{
		
		var val = new Array(
			<?php
			$host = 'localhost';
			$login = 'root';
			$password = 'pass';
			$db_name = 'db';
			$connect;
			$connect = new mysqli($host, $login, $password, $db_name);
			/*if (!$connect) 
			{
			    $c=1;
			}
			else
			{
			   $c=0;
			}*/
			$result = $connect->query("SELECT * FROM r_send ORDER BY id DESC LIMIT 1"); 
		        
			$data = $result->fetch_array();
			$result->close();
			
			echo $data['id'], ", ",  $data['val1'],", ", $data['val2'];
                        
			?>
		);
		
		document.getElementById("id").innerHTML = val[0];
		document.getElementById("val1").innerHTML = val[1];
		document.getElementById("val2").innerHTML = val[2];
		$('#txt').load('load.txt');
		refresh();
   	},1000);
}
</script>

</body>
</html> 

Dane z bazy się pobierają do tablicy val ale tylko jeden raz tzn. po wejsciu na stronę. Gdy coś dodam do DB to nowy wynik już się nie wyświetli na stronie tylko muszę ją odświerzyć ręcznie. Natomiast dane z pliku tekstowego się odświerzają co jedną sekundę. Sprawdziłem to, inny program zapisuje losowe wartości do DB(val1 i val2, id jest incrementowane) i do pliku tekstowego. To co napisałem jest OK?

0

To co napisałeś nie zadziała, bo wykonałeś kod PHP wewnątrz strony, który to kod wykonał serwer - innymi słowy, serwer wypluł CI wynik z bazy i zwrócił jako string (czyli tekst). Ty wstrzyknąłeś to do kodu JSa a ten wykonuje się prawidłowo - te dane które serwer wyrenderował są ciągle odświeżane (jak lookniesz w źródło wygenerowanej strony to zrozumiesz o co chodzi).
Aby zrealizować to co chcesz, musisz wykonać zapytanie AJAXowe do zewnętrznego pliku (akcji) PHP, który wykona to co Ty wykonujesz tutaj i zwróci w postaci odpowiedzi. Tą odpowiedź musisz wstrzyknąć do odpowiedniej sekcji strony i dodać oczywiście setInterval.

Masz tu przykładowy kod realizujący to zadanie: https://stackoverflow.com/a/16146522/5497893 ewentualnie jak wolisz funkcją load (zastępuje danego diva treścią z ajaxa) to masz tutaj inne wywołanie: https://stackoverflow.com/a/25446696/5497893

1 użytkowników online, w tym zalogowanych: 0, gości: 1