javascript - 关于通过ajax获取数据return不出来的问题
迷茫
迷茫 2017-04-11 12:43:19
[JavaScript讨论组]

function Ajax(page){
                var dataAjax = new Object();
                $.ajax({
                    type:"post",
                    url:"http://www.mocky.io/v2/58c9fb1f0f0000f4206b8b59",
                    async:false,//false
                    dataType:"jsonp",
                    data:page,
                    success:function(data){
                        dataAjax = data.rechargeDetail;
                        console.log(dataAjax);//能打印出来数据
                    }
                });
                console.log(dataAjax)//打印出来是空
                return dataAjax;

            }
            var dataList = Ajax(1);
            console.log(dataList)//打印出来是空

为什么会出现这种状况,数据是同步跨域请求,我在本地上模拟的json数据都能取得到,但是这边就取不到,我怀疑是请求数据时间太久了,query强行让ajax异步了?你们觉得呢

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(4)
ringa_lee

题主,JSONP是不能使用async:false同步ajax的。
ajax是ajax,JSONP是JSONP。

巴扎黑

根据jquery文档:http://api.jquery.com/jquery....

Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation.

jsonp是不支持同步的

伊谢尔伦

代码由上往下执行。走到ajax的时候进入异步,继续往下走到console.log(dataAjax) 如果此时你ajax请求还没取到数据还没给dataAjax赋值的话 这时候输出必然为空

正确做法应该是 return dataAjax 写在 成功回调里面

黄舟

jsonp实质上不是ajax,没有同步一说,实在想解耦,用promise形式

function Ajax(page){
    return $.ajax({
        type:"post",
        url:"http://www.mocky.io/v2/58c9fb1f0f0000f4206b8b59",
        async:false,//false
        dataType:"jsonp",
        data:page
    }).then(function(data){
        return data.rechargeDetail;
    });
}

Ajax(1).then(function(dataList){
    console.log(dataList)//打印出来就不是空了
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号