Javascript中的全局变量未更新

时间:2012-06-12 17:32:17

标签: javascript

我花了最后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被检索得很好。

3 个答案:

答案 0 :(得分:2)

我不知道你何时尝试使用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,则必须在成功回调中使用它们,或者在成功回调中调用的函数中使用它们。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您的ajax回调是异步的。在远程服务器响应之前,它不会运行success功能。一旦执行,您的函数就会执行,变量会递增。

这是Javascript编程和异步编程的一个难点:一次有很多球,并且很难推断他们如何完成他们的操作,以及什么时候可以看到结果

很容易将$ .ajax()调用视为“从服务器获取结果”,但它确实是“向服务器发出请求”。谁知道什么时候可以完成?