关于通过ajax获取数据return不出来的问题

clipboard.png

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异步了?你们觉得呢

阅读 5.1k
4 个回答

题主,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)//打印出来就不是空了
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题