问个JS变量使用的问题

var xdata;
                        $.ajax({
                            url:"../addons/cms/wxpay/ispay",
                            success:function(res){
                               xdata = res; 
                            }
                        })
                        return xdata;
              请问怎么才能return到ajax返回值?
              在上面定义的xdata好像无效                      
                    
                    
阅读 2.4k
5 个回答

ajax可以同步的,你这是因为异步了,只需要async:false,

$.ajax({
    url:"../addons/cms/wxpay/ispay",
    async:false,
    success:function(res){
       xdata = res; 
    }
})
return xdata;

这是一个异步请求, 对于异步操作我们通常使用 回调 或者 promise

例如

let sendAjax = function(callback){
    $.ajax({
        url: 'xxx.json',
        success: function(res){
            callback(res)
        }
    })
}

sendAjax(function(res){
    console.log(res)    // 拿到数据
})

promise版本

let sendAjax = function(){
    return new Promise(function(resolve, reject){
        $.ajax({
            url: 'xxx.json',
            success: function(res){
                resolve(res)
            }
        })
    })
}

sendAjax().then(function(res){
    console.log(res)    // 拿到数据
})

jQuery中的ajax默认是异步的,数据都还没返回来你就return了当然得不到数据

function getData(xdata){
    //do something...
    return xdata;
}

$.ajax({
    type:'get',
    url:"../addons/cms/wxpay/ispay",
    success:function(res){
       getData(res);
    }
})

用promise.then或者是async await

推荐问题
宣传栏