jquery 使用return返回空值
如图,图1:ajax使用alert直接把返回值弹出来,成功图2:deom.php中的代码图3:弹出成功图4:使用return,失败图5:弹出值是空的请问怎么改啊,我不想获...
如图,图1:ajax使用alert直接把返回值弹出来,成功图2:deom.php中的代码图3:弹出成功图4:使用return,失败图5:弹出值是空的 请问怎么改啊,我不想获取到值就直接弹出来,我想保存到一个值里面
展开
展开全部
GetData没有返回值,你写的那个匿名函数是参数,return Data 是匿名函数的return,并不是GetData的return,你基础太差,我不太好回答。还有 undefined 并不是 null 它可以理解为无法表述的值,逻辑上也有问题,你没获取到值怎么可以直接用 alert 弹出来。正文来了。要实现你的想法需要一个回调函数。
function callBack(DATA){
var D = DATA;//保存到一个值里面0.0 !!
alert( D );//正确写法
return D;//这只是为了更好的说明下面的错误
}
function GetData(G_Name,G_Type){
$.post( "./database/deom.php", { Name:G_Name,Type:G_Type }, function(Data){
callBack(Data);
})
}
alert( callBack() );//错误!,post请求是异步操作会导致上下文问题。
是不是有一种脱裤子放屁的感觉0.0。有兴趣去了解 ECMAScript 6,那里有优雅的解法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
默认的$.post, $.get 是异步请求,也就是说,不会等你请求结果,就return了,所以是空值。。
解决方法,用$.ajax
function getData() {
var d;
$.ajax({
type:"POST",
async:false, // 不使用异步请求
url:"",
data:{},
success: function(data){
d = data
}
}
return d;
});
或者直接设置
$.ajaxSetup({ async : false });
再$.post
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
function getData(s_name,g_type){
var d = $.Deferred();
$.post(*.database.....),{
.....
.... //此处省略你那些代码, 是的 我就是这么懒。 下面直接callback
function(Data) {
d.resolve(Data);
}
return d;
}
getData().done(function(Data){
alert(Data);
});
为什么会alert出undefined, 你跟断点就会发现 是先走的return再走的ajax的callback.
你可以查查jquery api的 延迟对象
var d = $.Deferred();
$.post(*.database.....),{
.....
.... //此处省略你那些代码, 是的 我就是这么懒。 下面直接callback
function(Data) {
d.resolve(Data);
}
return d;
}
getData().done(function(Data){
alert(Data);
});
为什么会alert出undefined, 你跟断点就会发现 是先走的return再走的ajax的callback.
你可以查查jquery api的 延迟对象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询