如何return返回ajax请求完成后的数据

先上代码

function getNewDate( flyNum ){
    $.ajax({
        url: '',
        type: 'GET',
        dataType: 'json',
        async: true,
        data: {
            param1: flyNum
        },
    })
    .done(function(res) {
        var thisDate = res.data.date;    //需要返回thisDate
    })
    .fail(function(err) {
        //console.log("error");
    })
    .always(function() {
    });
}
var mydate = getNewDate(123);

使用的jquery封装的ajax
在done中return的是done方法
请问如何才能在getNewDate函数中返回获取到的thisDate
目的只有一个,getNewDate返回thisDate,求大佬们教育教育,感觉脑子糊了

阅读 20.8k
7 个回答

异步请使用Promise

function getNewDate(flyNum)
{
    return new Promise(function(resolve,reject)
        {
            $.ajax(
                {
                    url: '',
                    type: 'GET',
                    dataType: 'json',
                    async: true,
                    data:
                    {
                        param1: flyNum
                    },
                })
            .done(function(res)
                {
                    var thisDate = res.data.date;    //需要返回thisDate
                    resolve(thisDate);
                })
            .fail(function(err)
                {
                    //console.log("error");
                    reject(err);
                })
            .always(function()
                {
                });
        });
}
getNewDate(123).then(function(resolveData)
    {
        //code....
        console.log('resolveData',resolveData);
    },function(rejectData)
    {
        console.log('rejectData',rejectData);
    });

需要把 ajax 设置为同步,定义一个变量把获取到的值赋值给这个变量,最后返回这个变量

function getNewDate( flyNum ){
    var rst;
    $.ajax({
        url: '',
        type: 'GET',
        dataType: 'json',
        async: false,
        data: {
            param1: flyNum
        },
    })
    .done(function(res) {
        var thisDate = res.data.date;    //需要返回thisDate
        rst = thisDate;
    })
    .fail(function(err) {
        //console.log("error");
    })
    .always(function() {
    });
    return rst;
}
var mydate = getNewDate(123);

ajax是异步的,你可以在$.ajax{}内对thisDate去操作,赋值页面还是其他操作都可以,但是想要在这个作用域外去得到的话是不行的

function getNewDate( flyNum ){
    var thisDate
    $.ajax({
        url: '',
        type: 'GET',
        dataType: 'json',
        async: false,
        data: {
            param1: flyNum
        },
    })
    .done(function(res) {
        thisDate = res.data.date;    //需要返回thisDate
    })
    .fail(function(err) {
        //console.log("error");
    })
    .always(function() {
    });
    return thisDate;
}
var mydate = getNewDate(123);

把ajax异步请求改为同步请求->async: false
既然是封装方法,有返回值才会赋值给mydate

用deffer + promise

题主是不是可能遇到this指向的问题了,所以才想到在ajax请求之后把数据返回回去?ajax的回调里是可以直接处理数据的,回调函数就是干这个的。

function getNewDate( flyNum ){
    var _this = this;
    $.ajax({
        url: '',
        type: 'GET',
        dataType: 'json',
        async: true,
        data: {
            param1: flyNum
        },
    })
    .done(function(res) {
        _this.thisDate = res.data.date;   
    })
    .fail(function(err) {
        //console.log("error");
    })
    .always(function() {
    });
}

只是一个猜测哈,不是很清楚具体什么功能需求

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题