Автообновление страницы ajax как исправить ошибку?

//Объект XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
//Получаем объект XMLHttpRequest 
function createXmlHttpRequestObject(){
	var xmlHttp;
	//Если исп IE
	if(window.ActiveXObject)
	{
		try
		{
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (e)
		{
			xmlHttp = false;
		}
		}
		//Если другой браузер
		else
		{
			try
			{
				xmlHttp = new XMLHttpRequest();
			}
			catch (e)
			{
				xmlHttp = false;
			}
			}
			//Если не получилось создать объект XMLHttpRequest
			if (!xmlHttp)
				alert("Error creating the XMLHttpRequest object.");
			else
				return xmlHttp;
		}
		//Делаем HTTP - запрос 
		function ajax()
		{
			if(xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
			{
				//Получаем имя юзера,в форме полю ввода присвоено имя Name 
				name = encodeURIComponent(document.getElementById("Name").value);
				//передаем введенное имя сценарию ajax.php
				xmlHttp.open("GET", "ajax.php?name=" + name, true);

				xmlHttp.onreadystatechange = processServerResponse;
				//делаем запрос к серверу
				xmlHttp.send(null);
			}
			else
				//Если соединение занято , делаем повтор через 1 секунду
			setTimeout('ajax()', 1000);

		}
		//Эта фнкция выполняется автоматически при получении ответа от сервера
		function processServerResponse()
		{
			if (xmlHttp.readyState == 4)
			{
			// статус 200 - транзакция прошла успешно 
			if (xmlHttp.status == 200)
			{
			//Извлекаем XML , которые мы получили от сервера 
			xmlResponse = xmlHttp.responseXML;
			xmlDocumentElement = xmlResponse.documentElement;
			helloMessage = xmlDocumentElement.firstChild.data;
			//Обновляем страницу - выводим полученный от ajax.php результат
			//В див с именем OurMessage
			document.getElementById("OurMessage").innerHTML = '<i>' + helloMessage + '<i>';
			//перезапуск через 1 секундну 
			setTimeout('ajax()', 1000);
			}
			//Если статус <> 200, значит , произошла ошибка 
			else 
			{
				alert("Ошибка доступа к серверу: " + xmlHttp.statusText);
			}
			}
		}

<?php 
//XML output
header('Content-Type: text/xml');
//XML header 
echo "<? xml version="1.0" encoding="UTF-8" standalone="yes" ?>";
// print the <response> element
echo '<response>';
// получаем имя юзера
$name = $_GET['name'];
echo htmlentities($name) . ', хорошего Вам дня!';
//конец <response>
echo '</response>';
 ?>


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  Введите ваше имя:
  	<input type="text" id="Name">
  	<input type="button" value="submit" name="mySubmit" onclick="ajax();">
  	<div id="OurMessage"></div>
  <script src="ajax.js"></script>
</body>
</html>
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ответы на вопрос 2
hzzzzl
@hzzzzl
вот так навскидку неправильно
//перезапуск через 1 секундну 
      setTimeout('ajax()', 1000);

таймаут работает так --
setTimeout(ajax, 1000)

а вообще, лучше и проще ведь использовать
https://learn.javascript.ru/fetch
https://habr.com/ru/post/252941/
(если не для учебы и чтобы понять как это всё работает)
Ответ написан
profesor08
@profesor08 Куратор тега PHP
У тебя куча перемешанного кода, в котором ты наверняка сам не разбираешься что там происходит. Попробуй все упростить и свести к минимуму. Чтоб происходит просто запрос, посмотри какие приходят ответы, попробуй их обработать и тд. Вот для примера кусочек кода, который раз в секунду будет слать запрос на сервер и получать данные, потому их вставлять куда надо. В случае каких-то ошибок, выведется сообщение в консоль, но код продолжит работать.

async function update() {
  try {
    const name = encodeURIComponent(document.getElementById("Name").value);

    const response = await fetch("ajax.php?name=" + name);

    const text = await response.text();

    document.getElementById("OurMessage").innerHTML = '<i>' + text+ '<i>';
  }
  catch (err) {
    console.warn(err);
  }

  setTimeout(async () => await update(), 1000);
}

(async () => {
  await update();
})();
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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