我正在编写一些执行普通 ajax 调用的 jQuery 代码。我有一个全局 Javascript 变量,我需要在每次调用时增加线程安全。如果这是 Java,我会使用 synchronized
但事实并非如此 :-)
这是一个代码片段:
var myval;
function myFunc()
{
$.ajax({
url: myurl,
type: 'GET',
data: { ...my data... },
success: function()
{
myval++;
}
});
}
鉴于 myFunc()
与点击事件相关联,我如何确保 myvar
始终安全/一致地增加?我知道我可以也许使用async: false
,但我宁愿避免它。我什至不确定它会那样工作。
感谢您的帮助!
最佳答案
没问题 - JS 不会遇到原子性问题,因为没有(用户可见的)线程[*]
除了响应事件或初始脚本加载外,JS 中没有任何事情发生。一段代码不可能在增量期间误读 myval
,因为整个 success
回调必须在任何其他事件处理代码开始之前完成。
[*] 是的,有 WebWorker,但它们使用消息传递而不是变量共享。
关于javascript - jQuery/AJAX并发访问全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25077844/