我花了最后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被检索得很好。
答案 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()调用视为“从服务器获取结果”,但它确实是“向服务器发出请求”。谁知道什么时候可以完成?