最新消息:红方科技年末特惠:.com域名55元、云虚机五折优惠,买3年送2年,更有智能建站套餐等你来取!

jquery $.post,$.get回掉函数返回值问题

JS yinhexi 2016浏览 0评论

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

$.get(URL,data,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;
}

看上去逻辑上貌似没问题,但试过就知道这样是存在问题的了,发现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;

}

转载请注明:红方博客 » jquery $.post,$.get回掉函数返回值问题