注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Big鹏 ——学无止境

不谋万世者,不足谋一时;不谋全局者,不足谋一域

 
 
 

日志

 
 

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

2014-03-20 23:17:41|  分类: 小技能 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

?  $.get(URL,callback);

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

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

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

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

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


 

  评论这张
 
阅读(6038)| 评论(28)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017