Javascript 存储来自ajax的变量

Javascript 存储来自ajax的变量,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我试图存储来自调用PHP脚本的ajax get请求的变量。我需要存储信息的变量在区间函数中保持不变。我看到了数据,在PHP脚本上调用成功,但返回到包含ajax请求的代码时,变量未定义。所以我的问题是如何将这些数据存储到一个变量中,并确保变量数据一直保留到我离开网页为止 index.php // ajax repeated call on home page <script type="text/javascript"> var storedVariable0; $(d

我试图存储来自调用PHP脚本的ajax get请求的变量。我需要存储信息的变量在区间函数中保持不变。我看到了数据,在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>

感谢您的帮助

默认情况下,Ajax是异步的。(同步正在弃用)

异步意味着第三个document.write块(storedVariable0)很可能在Ajax完成块之前执行。因此,在完成之前,您将得到未定义


建议您使用异步方式,您需要更改编码方式,并确保所有对storedVatiable0的访问都是在完成后进行的。

您能否详细说明您试图对文档写入执行的操作?这个变量存在于时间间隔之外,本质上是一个全局变量,它将一直存在,直到您重新加载页面为止。由于网络延迟和请求时间是可变的,随着时间的推移,请求很可能会开始堆叠,因为时间间隔并不关心异步请求是否完成。我建议不要使用间隔,而是在done方法中执行setTimeout,以便在一秒钟过后调用执行ajax请求的方法。然后仍然有递归,但是请求不会堆叠。全局+ajax错误通常涉及对回调函数异步执行的误解。参见,例如。
$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);
    }
}