У меня есть поле в базе данных, которое изначально установлено на 0
, но может быть установлено на 1
другими пользователями сайта в любое время. Я хочу создать javascript, который ждет, пока поле не будет установлено на 1
.
. Для этого я создал файл load-variable.php
, который загружает и возвращает поле из базы данных. Затем я написал функцию javascript, которая загружает этот файл с использованием ajax и ожидает результата.
Если результат все еще равен 0
, эта же функция вызывается снова с задержкой 500ms
созданный функцией window.setTimeout
. Если результат 1
, вызывается другая функция continueScript
, которая выполняет следующую часть программы.
Вот код:
function loadVariable() {
xhr = new XMLHttpRequest();
xhr.open('GET', 'load-variable.php', true);
xhr.send();
xhr.onload = function() {
if (xhr.responseText == '0') {
window.setTimeout(loadVariable, 500);
} else {
continueScript();
}
}
}
Если поле базы данных изменяется на 1
в течение примерно 15 секунд после первого вызова функции, эта функция работает очень хорошо.
Однако, если это занимает больше времени, в конечном итоге возникает ошибка (в последний раз, когда я проверял, это произошло после функция была вызвана 28 раз, что примерно после 15 секунд ожидания).
Мой браузер safari (возможно, проблема связана с настройкой браузера c?), и я получаю следующую ошибку:
Safari не может открыть страницу. Ошибка: «Операция не может быть завершена. Ошибка протокола »(NSPOSIXErrorDomain: 100)
Я что-то не так делаю? Повторяются ли ajax запросы в функции, которая называет себя правильным способом сохранения данных, или мой метод неверен и, таким образом, вызывает проблему?
Заранее спасибо за совет!
Обновление 04/04/20 (1)
Проблема действительно очень странная! После того, как эта ошибка была вызвана, потребуется еще 10–20 минут, чтобы я снова смог посетить мой сайт.
Даже если я пытаюсь загрузить другую страницу, которая не имеет ничего общего с этой программой и не использует ajax, то же самое сообщение об ошибке все еще появляется, и я должен ждать восстановления сайта, прежде чем я смогу продолжить.
Обновление 04/04/20 (2)
Вот содержимое load-variable.php
, которое считывает данные из базы данных mysql
.
<?php
// Database details (I've obviously not included them here)
$servername = "";
$username = "";
$password = "";
$dbname = "";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "SELECT Variable FROM Table WHERE Id='1';";
$query = mysqli_query($conn, $sql);
echo(mysqli_fetch_array($query)[0]);
exit();
?>
Обновление 04/04/20 (3)
Я сейчас тестировал эту проблему в chrome, и была также ошибка. Здесь было сообщение:
Ваш IP-адрес был заблокирован из-за подозрительного поведения.
Теперь мне кажется, что это мой сервер, который считает мое поведение подозрительным и, следовательно, блокирует меня на некоторое время. Являются ли повторные запросы на одно и то же поле в базе данных «подозрительными»?