jquery 使用return返回空值

如图,图1:ajax使用alert直接把返回值弹出来,成功图2:deom.php中的代码图3:弹出成功图4:使用return,失败图5:弹出值是空的请问怎么改啊,我不想获... 如图,图1:ajax使用alert直接把返回值弹出来,成功图2:deom.php中的代码图3:弹出成功图4:使用return,失败图5:弹出值是空的 请问怎么改啊,我不想获取到值就直接弹出来,我想保存到一个值里面 展开
 我来答
入萌级
2017-11-06
知道答主
回答量:5
采纳率:50%
帮助的人:3.8万
展开全部

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,那里有优雅的解法。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
154406720
2017-11-06 · TA获得超过169个赞
知道答主
回答量:116
采纳率:86%
帮助的人:58万
展开全部

默认的$.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 

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
扌免哥欠
2017-11-06 · TA获得超过107个赞
知道小有建树答主
回答量:110
采纳率:66%
帮助的人:72.6万
展开全部
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的 延迟对象
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式