怎么外部变量接收ajax返回值,从外部变量接收$.ajax()返回结果,理解什么叫“异步”...

本文探讨了JavaScript的异步特性,通过一个$.ajax()的例子说明如何在异步环境中正确接收返回值。当使用异步请求时,外部变量无法立即获取到回调函数中的更新值,因为异步操作在同步代码执行完毕后才会进行。解决方案是设置$.ajax()的async参数为false,但这会导致阻塞。理解异步执行的概念对于正确处理异步请求至关重要。

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

$.ajax()默认是异步的,又或者说JavaScript本身就是异步的。那到底什么叫“异步”呢?

举个例子:

我的需求是,把一个数据发送给服务器,然后服务器返回一个响应码(0-失败|1-成功),我要拿到这个响应码,根据具体值在前端显示提示。

var statusCode = 0;

$.ajax({

type: 'POST',

url: '/updateurl',

// async: false,

data: {name:'Mon's Works'},

success: function (e) {

statusCode = e;

}

});

console.log(statusCode);

首先创建一个变量statusCode用于接收响应码,初始化为0;

然后执行一个POST请求,在回调函数中将响应码赋给statusCode;

最后输出statusCode。

执行上面示例代码,即使服务器返回的响应码是1,控制台输出的也是初始值0;

拿不到返回值我认了,问题是:为什么不是undefined或者null呢?

因为输出statusCode前,根本没有执行statusCode = e。

个人理解

所谓异步就是,console.log(statusCode)和$.ajax()是互不相干的,是同时执行的,

也就是说console.log(statusCode)执行完了,$.ajax()还在跟服务器握手,回调函数还没来得及执行。

从逻辑上来说,当执行到console.log(statusCode)时,解释器会在上下文查找statusCode的定义,因为var statusCode = 0比success: function (e) { statusCode = e; }更快,所以statusCode直接拿到了初始值。

既然var statusCode = 0比success: function (e) { statusCode = e; }更快,那么把var statusCode = 0干掉,不就没有人比success: function (e) { statusCode = e; }更快了吗?

不好意思,结果是statusCode is not defined。

解决方案

如果把$.ajax()的async参数改成false,请求将以“同步”方式执行,解释器会等待请求完成并执行回调之后再console.log(statusCode),此时将输出1。

async: false应该仅对当前请求有效,毕竟每次请求都可以定义该参数。

结论:同时执行却不叫“同步”,起名那个人脑子有坑。

标签:异步,执行,console,log,ajax,接收,statusCode

来源: https://www.cnblogs.com/monsino/p/12884501.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值