繁体   English   中英

我到底如何编写一个回调函数来更改jquery的AJAX中的全局变量?

[英]How exactly do I write a callback function to change a global variable inside AJAX for jquery?

好的,所以我环顾了很多答案,但这些答案似乎都对我想要实现的目标没有帮助。 说我有以下代码:

var n = 0;
$.ajax({
    ...
    success: function(data){
        n = Math.floor((Math.random()*10) + 1);
        somefunction(n);
    }
});

console.log(n) // n would obviously be 0 again

我通过使用async:false使其同步来完成此操作,但是从我的阅读中了解,这对用户体验不利,因为它在等待结果时冻结了浏览器。 在上述情况下,如何精确实现回调函数以允许在ajax调用后修改全局变量n

异步函数在另一个线程(非阻塞)中执行,因此回调将在您的下一条指令之后被调用:

console.log(n);

n在调用回调(成功函数)之后设置,但日志在异步函数完成之前设置。 一个简单的解决方案是将您的代码包装在一个函数中,并在jQuery调用成功函数之后调用它。 请注意,您将不需要引用全局变量,因为它将在jQuery范围之外设置并且可以由operation_x函数范围访问。

var n = 0;
function operation_x(){
    console.log(n); // n is set to random value
}
$.ajax({
    ...
    success: function(data){
        n = Math.floor((Math.random()*10) + 1);
        somefunction(n);
        operation_x();
    }
});
console.log(n); // n is 0

您可以使用JavaScript本地存储:

 $.ajax({
    ...
    success: function(data){
        n = Math.floor((Math.random()*10) + 1);
        somefunction(n);
localStorage.setItem("n", 100)
    }
});

var n;
if(typeof(Storage) !== "undefined") {
    // Code for localStorage.
    n = localStorage.getItem("lastname");
} else {
    // Sorry! No Web Storage support..
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM