Javascript 中的全局变量未更新
Global variables in Javascript not updating
我花了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() 调用视为"从服务器获取结果",但它实际上是"向服务器发出请求"。 谁知道什么时候会结束?
相关文章:
- 更新后,父视图未在 Electron 中的
上设置全局变量 - 用javascript更新事件函数中的全局变量
- 从函数更新全局变量
- 全局变量在 javascript 中未更新
- 在 NodeJS 中使用和更新全局变量是否安全?
- 在 Javascript 中本地更新全局变量
- 在 JavaScript 中回溯,无法更新全局变量
- 更新全局变量javascript/html
- JavaScript更新全局变量
- 通过回调更新全局变量
- 在javascript中更新全局变量
- 可以't从一个角度内更新全局变量.forEach循环
- 从函数更新全局变量
- 如何在窗口关闭时更新全局变量
- 侦听器调用的Javascript函数不能更新全局变量
- 从eventlistener更新全局变量
- 无法在函数内部更新全局变量并在函数外部调用它(jQuery)
- 用函数中的值更新全局变量;它被存储在一个变量中
- Javascript匿名函数未更新全局变量
- 更新全局变量