0

我花了最后 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。

4

3 回答 3

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,则必须在成功回调中或在成功回调中调用的函数中使用它们。

于 2012-06-12T17:39:21.523 回答
0

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

于 2012-06-12T17:38:31.020 回答
0

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

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

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

于 2012-06-12T17:42:34.920 回答