Javascript 中的全局变量未更新

Global variables in Javascript not updating

本文关键字:更新 全局变量 Javascript      更新时间:2023-09-26

我花了30分钟来解决这个问题。

让我们假设以下情况:

<script>
    var x = 0 ; //global variable
    function compute() {
        x = x+1; 
    }
</script>

x 的值是否应该递增,以便我以后可以在函数中访问它?

我有以下代码:

var id1 = 0;
var id2 = 0; 
$.ajax({
    url: "http://localhost/twee/chat/comment",
    type: 'POST',
    data: form_data,
    success: function(data) {
        var data1 = parseInt(data);
        id1 = id2 = data1; 
    }
});

我希望能够在以后的函数中访问 id1 和 id2 的值(自从我将它们声明为 0 以来进行了更新)。

但是,该值保持为零,并且 data1 检索得很好。

我不知道

你什么时候尝试使用 ID,但 ajax 调用是异步的,所以如果你尝试像这样读取变量:

var id1 = 0;
var id3 = 0 ; 
$.ajax({
         url: "http://localhost/twee/chat/comment",
         type: 'POST',
         data: form_data,
         success: function(data) {
              var data1 = parseInt(data, 10);
          id1 = id2 = data1;
         alert(id1) // Will alert whatever number returned as data. 
}});
alert(id1) // Will alert 0

第二个警报几乎与 ajax 调用同时调用,此时数据尚未更新,而在数据返回之前不会调用第一个警报。如果要使用 ID,则必须在成功回调中使用它们,或者在成功回调中调用的函数中使用它们。

您确定在success回调运行后检查id1的值吗? ajax是异步操作,则在响应从服务器返回之前,不会调用回调。

你的 ajax 回调是异步的。 在远程服务器响应之前,它不会运行success函数。 完成后,您的函数将执行,变量将递增。

这是Javascript编程和一般异步编程中的一个困难:空中同时有许多球,很难推理它们如何完成操作,以及何时可以看到结果。

很容易将 $.ajax() 调用视为"从服务器获取结果",但它实际上是"向服务器发出请求"。 谁知道什么时候会结束?