Сохранение переменной из ajax

Я пытаюсь сохранить переменную из запроса на получение 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);
    }
}

спасибо за любую помощь

Не могли бы вы подробнее рассказать о том, что вы пытаетесь сделать с написанным документом? Переменная, поскольку она существует за пределами интервала и по сути является глобальной переменной, будет сохраняться до тех пор, пока вы не перезагрузите страницу.

Taplar 20.07.2018 00:38

Я бы действительно рекомендовал против, как правило, с использованием интервала с ajax. Поскольку сетевая задержка и время запроса являются переменными, весьма вероятно, что со временем запросы начнут накапливаться, потому что интервалу не важно, завершился ваш асинхронный запрос или нет. Вместо использования интервала я бы предложил выполнить setTimeout в методе done для вызова метода, который выполняет запрос ajax по прошествии секунды. Тогда у вас все еще есть рекурсия, но запросы не будут складываться.

Taplar 20.07.2018 00:48

Ошибки Global + ajax часто связаны с неправильным пониманием асинхронного выполнения функций обратного вызова. См., Например, stackoverflow.com/questions/40190772/…

Paul 20.07.2018 00:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По умолчанию Ajax асинхронный. (синхронный устарел).

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

Рекомендуется использовать асинхронный режим, и вам нужно изменить способ кодирования и убедиться, что весь доступ к storedVatiable0 происходит после завершения работы.

Другие вопросы по теме