@m1kz

Почему не работает функция, возвращает «undefined»?

Не работает функция, которая должна возвращать строку, а в итоге возвращает "undefined".

Ссылка на сайт, где можно увидеть все в консоле (Чтобы понять, что из себя делает сайт, откройте 1 страницу, а на других вкладках можно перезагрузить, на первой значение поменяется без перезагрузки) :


index.php:

<!DOCTYPE html>
<html lang="ru">
<head>
	<meta charset="UTF-8">
	<title>Счетчик просмотров</title>
	<script type="text/javascript">
			function getx(){ //Получение переменной из php
				let xhr = new XMLHttpRequest();
				xhr.open('GET', 'get.php', true);
				xhr.send();
				xhr.onreadystatechange = function () {
		      if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
		      		let Re = xhr.responseText; 
		          console.log(Re); //Показывает значение переменной
							return 'любую строку он вернет как undefined' ;//Не возвращает
		      };	
   		 		};	
			}
			
      function myFunction() {
				let a = document.getElementById("p1");
				let num = getx(); //Получаем значение счетчика (должны получать)
				console.log(num);  //Получаем undefined
				if (a.textContent.split(' ')[-1] != num) {
					
					a.innerHTML = 'Количество'+' просмотров :' + num;
					}
				setTimeout(myFunction, 1000) //рекурсия
				}

			
    </script>
	
	
</head>
<body onload="myFunction()">
<?php  //Записываем +1 к счетчику просмотров страницы 
	$f = strval((int)fgets(fopen('x.php', 'r'))+1);
	$fw = fopen('x.php', 'w');
	fwrite($fw, $f);
	fclose($fw);
	?> 

        <p id="p1"></p>

</body>
</html>


Файл php.get :
<?php
echo file_get_contents('x.php');
?>


Файл x.php:
215 //любое число

Я не могу понять, почему функция getx() вроде как работает, т.к. нужные значения пишутся в строке, но почему тогда они не возвращаются?
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 1
KickeRocK
@KickeRocK
FrontFinish
Вот это console.log(num);
выполнится раньше чем придёт ответ в вашей getx
await гуглите
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы