Javascript中的全局变量未更新
我花了30分钟才弄明白 让我们假设以下情况:Javascript中的全局变量未更新,javascript,Javascript,我花了30分钟才弄明白 让我们假设以下情况: <script> var x = 0 ; //global variable function compute() { x = x+1; } </script> 我希望能够在以后的函数中访问id1和id2的值(自从我将它们声明为0以来已更新) 但是,该值保持为零,并且可以很好地检索数据1 您确定在成功回调运行后正在检查id1的值吗ajax是一个异步操作,在服务器返回响应之前不会调用您
<script>
var x = 0 ; //global variable
function compute() {
x = x+1;
}
</script>
我希望能够在以后的函数中访问id1和id2的值(自从我将它们声明为0以来已更新)
但是,该值保持为零,并且可以很好地检索数据1 您确定在
成功
回调运行后正在检查id1
的值吗ajax
是一个异步操作,在服务器返回响应之前不会调用您的回调。我不知道您何时尝试使用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,则必须在成功回调中或在成功回调中调用的函数中使用ID。ajax回调是异步的。在远程服务器响应之前,它不会运行
success
功能。一旦它执行了,您的函数就会被执行,并且变量会递增
这是Javascript编程和异步编程中的一个难点:一次有许多球在空中,很难推断它们可能如何完成操作,以及何时可以看到结果
很容易将$.ajax()调用视为“从服务器获取结果”,但实际上是“向服务器发出请求”。谁知道它可能会在何时完成?如果不使用第二个参数指定基数,请不要调用
parseInt
。我想你申报id1和id3,然后你要id2?未定义的异常将被抛出,数据检索正常。问题不在parseInt上。@TrinhHoangNhu我看到并纠正了这一点。SorryOkay我可以不将其分配给全局变量并使用它吗?@DpkgMe好的,您可以将其分配给全局变量,但是如果您尝试在成功回调之外读取该全局变量,则该变量可能尚未设置,因为此时数据尚未返回。这就是为什么要使用success回调函数,以便在使用它之前知道您已经拥有了数据。上面的情况似乎是可能的,但它假设id1和id2与尝试调用它们的任何函数在同一范围内。从这个片段来看,它们似乎是全局的。但是,如果此代码存在于某种包装函数中,则需要确保调用例程在相同的范围内。我正在使用pusher,并将在pusher触发器内发送ID。谢谢大家。@jatrim谢谢澄清,我只是假设它们没有被另一个函数包装,因为OP说它们是gobal。
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