javascript - 如何从异步回调函数中更新全局变量?

标签 javascript asynchronous global-variables

我遇到一个问题,无法从回调函数内部更新全局变量。

这是我的代码:

// Set global variable.
var load_values_from_server = "initial value";

// Call our page that shows server load and put it into "results" variable.
microAjax("http://domain.com/show-server-load.php?" + randomnumber, 
 function (results) { 
    load_values_from_server = results; 
 });

// We want this to show the "results" from the callback function.
alert(load_values_from_server);

问题是警报始终显示“初始值”,而从不显示回调函数的“结果”。

我错过了什么?即使在回调函数中,全局变量不应该是全局的吗?

最佳答案

您的代码正在更新全局变量。设置该值的函数在代码中的警报语句之后调用。 JavaScript 代码不等待 microAjax 调用的执行结果。要检查 microAjax 方法是否成功返回,请在分配之后放置警报方法:

var load_values_from_server = "initial value";

microAjax("http://domain.com/show-server-load.php?" + randomnumber, 
  function (results) { 
    load_values_from_server = results;            
    alert(load_values_from_server); 
  });

microAjax 没有给您太多的配置可能性。看this使用 jQuery 执行同步请求的问题和解答。

关于javascript - 如何从异步回调函数中更新全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38390295/

相关文章:

javascript - 根据文件中的需要列出文件中的依赖项

javascript - Firebase Firestore - 在 Stripe.CreateCustomer 之后通过 Cloud Function 更新 Firestore 数据库

javascript - React onLoad img 事件未按预期工作

c++ - 如何避免涉及全局变量的循环#include?

python - 未定义全局变量 - Python

javascript - 保护 SPA HTML5 应用程序和 Web 服务之间的用户 token ?

javascript - 使用 AngularJS ng-repeat 时如何初始化本地范围内的属性

asynchronous - 在 Dart Web 服务器中使用同步文件系统方法是不是一个坏主意?

javascript - 直接对数据库操作执行等待将给出未定义的结果

python - 在这种情况下允许 Python monkey patching 的机制是什么?