页面中 全局变量 的更新(ajax也可以对全局变量 进行更新)

本文探讨了在JavaScript中,由于AJAX请求的异步性质导致全局变量可能未及时更新的问题。当在AJAX回调函数外部尝试访问这些变量时,可能会得到null或undefined。解决这个问题的方法包括设置请求为同步(async: false),但这会影响用户体验。推荐的做法是在AJAX回调函数内部处理后续操作,以确保数据正确可用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1

2

3

4

5

6

7

8

9

10

11

12

function checkoldpass($pass) {

    $.ajax({

        type: 'get',

        url: '/admin/check',

        data: {'password': $pass},

        dataType: 'json',

        success: function (data) {

            console.log(data)

        }

    });

    console.log(123);

}

这个运行结果是:

浏览器控制台先打印:123,然后才打印返回来的data。

为什么会是这样。因为js ajax请求原生就是异步的。

这就是说如果你在ajax回调函数外声明的变量,在ajax外打印会是null或者是undefined

1

2

3

4

5

6

7

8

9

10

11

12

13

function checkoldpass($pass) {

    var msg = null;

    $.ajax({

        type: 'get',

        url: '/admin/check',

        data: {'password': $pass},

        dataType: 'json',

        success: function (data) {

            msg = data

        }

    });

    console.log(msg);

}

这样打印出来的msg肯定是null。因为是异步的,所以js顺序执行到msg这里肯定是空了。

解决这个问题的办法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

function checkoldpass($pass) {

    var msg = null;

    $.ajax({

        type: 'get',

        url: '/admin/check',

        data: {'password': $pass},

        dataType: 'json',

     async:false,

        success: function (data) {

            msg = data

        }

    });

    console.log(msg);

}

在请求的代码里加上async:false,把请求设置为同步的。这样只有回调之后,js才会执行下面的代码。

但这种体验个人感觉不好。还是在回调里完成其它的操作比较好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值