Я пытаюсь сохранить переменную из запроса на получение ajax, вызывающего PHP-скрипт. Мне нужна переменная, в которой хранится информация, чтобы она сохранялась в интервальной функции. Я вижу данные, и вызов в PHP-скрипте выполнен успешно, но переменная не определена, когда я возвращаюсь к коду, содержащему запрос ajax. Итак, мой вопрос: как мне сохранить эти данные в переменной и убедиться, что данные переменных сохраняются до тех пор, пока я не покину веб-страницу?
index.php
// ajax repeated call on home page
<script type = "text/javascript">
var storedVariable0;
$(document).ready(function()
{
setInterval(function ()
{
// ensure data was retained will be undefined first time through
document.write(storedVariable0);
$.ajax({
url: '/fetchdatabase.php',
type: 'GET',
dataType: 'json',
})
.done(function(json){
storedVariable0 = JSON.stringify(json);
document.write(storedVariable0);
});
// ensure data is retained outside of the scope of the ajax call
document.write(storedVariable0);
}, 1000 ); //update every second
});
</script>
fetchdatabase.php
$sql = "SELECT content FROM messages ORDER BY id DESC LIMIT 1";
$result = mysqli_query($connection, $sql);
if (mysqli_num_rows($result) > 0)
{
// output data of each row
while($row = mysqli_fetch_assoc($result))
{
echo json_encode($row);
}
}
спасибо за любую помощь
Я бы действительно рекомендовал против, как правило, с использованием интервала с ajax. Поскольку сетевая задержка и время запроса являются переменными, весьма вероятно, что со временем запросы начнут накапливаться, потому что интервалу не важно, завершился ваш асинхронный запрос или нет. Вместо использования интервала я бы предложил выполнить setTimeout в методе done для вызова метода, который выполняет запрос ajax по прошествии секунды. Тогда у вас все еще есть рекурсия, но запросы не будут складываться.
Ошибки Global + ajax часто связаны с неправильным пониманием асинхронного выполнения функций обратного вызова. См., Например, stackoverflow.com/questions/40190772/…



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


По умолчанию Ajax асинхронный. (синхронный устарел).
Под асинхронностью это означает, что ваш третий блок document.write (storedVariable0), скорее всего, будет выполнен до блока Ajax done. Таким образом, вы получите undefined до того, как done будет завершено.
Рекомендуется использовать асинхронный режим, и вам нужно изменить способ кодирования и убедиться, что весь доступ к storedVatiable0 происходит после завершения работы.
Не могли бы вы подробнее рассказать о том, что вы пытаетесь сделать с написанным документом? Переменная, поскольку она существует за пределами интервала и по сути является глобальной переменной, будет сохраняться до тех пор, пока вы не перезагрузите страницу.