获取$.post $.get回调函数返回值问题

本文详细介绍了使用jQuery进行异步请求的方法,特别是如何正确处理$.post请求的返回值。通过对比同步与异步请求的不同,文章提供了一种解决异步请求返回值获取问题的有效方案。

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

                    <span id="OSC_h3_1"></span>

原文地址:http://wangzhipeng0713.blog.163.com/blog/static/1944751652014220111741183/

     项目中用Jquery操作,肯定避免不了向服务器发送请求,所以就会用到上面的两个函数。完整的函数格式如下:

  • $.get(URL,callback);

  • $.post(URL,data,callback);

而某些时候我们要用callback回调函数处理完以后的返回值,常规的思路是定义一个全局变量来接收返回值,然后在$post的外面,函数的里面返回即可。例如,下面为一个js函数:

function testAsync() {
//定义一个全局变量来接受$post的返回值</span><br> <span style="color: rgb(0, 0, 136)">var</span><span style="color: rgb(0, 0, 0)"> result</span><span style="color: rgb(102, 102, 0)">;</span><br> <span style="color: rgb(136, 0, 0)">//调用一般处理程序</span><br><span style="color: rgb(0, 0, 0)"> &nbsp; &nbsp;$.post("handler/QueryCourseByFirst.ashx", { Sqls: sql4 },
function (courseDT4) {
           result = courseDT4;
});
return result;
}

然后哪里需要这个函数就直接调用即可,例如:

//调用函数
var res = testAsync();

看上去逻辑上貌似没问题,但试过就知道这样是存在问题的了,发现res通常取不到courseDT4。调试就会发现函数的执行顺序并不是顺序执行的。那么自然就想到了$.post发得请求为“异步”请求,所以发出请求后还没等一般处理程序处理返回结果,就执行了为res变量赋值,因此取到的值总为undefined。

经过查询,可以发现Jquery封装好的.post.get发得请求都为“异步”请求(最好查看一下Jquery的源码),当然上面的用于获取回调函数返回值的写法是错误的,只需将发送方式改为同步即可,即如下代码:

function testAsync() {
//定义一个全局变量来接受$post的返回值</span><br> <span style="color: rgb(0, 0, 136)">var</span><span style="color: rgb(0, 0, 0)"> result</span><span style="color: rgb(102, 102, 0)">;</span><br> <span style="color: rgb(136, 0, 0)">//用ajax的“同步方式”调用一般处理程序</span><br><span style="color: rgb(0, 0, 0)"> &nbsp; &nbsp;$.ajax({
       url: "handler/QueryCourseByFirst.ashx",
       async: false,//改为同步方式
       type: "POST",
       data: { Sqls: sql4 },
       success: function (courseDT4) {
           result = courseDT4;
}
});
return result;
}

然后再直接调用函数就没有问题了,如下:

//调用函数
var res = testAsync();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值