小程序引入js执行ajax怎么返回不了数据怎么办?

小程序做ajax 调取后无法返回数据!

一直为空,后面发现是异步的问题

wx.request是异步请求,就会

导致,网络请求还没结束,就会执行后面的代码,从而引起异常,怎么解决这种异步导致的问题呢,当然是promise了。看例子:

我们再all.js里面

const app = getApp();
function ajaxlist(typeid,pagesize,name,page){
    //传递id 和需要的获取的页
    _this=this;
    var page=page || 1,
    typeid=typeid,
    name=name,
    pagesize=pagesize || 8;
         swan.request({
            url:app.gameUrl + '/plus/list_ajax.php',
            method: 'GET',
            dataType: 'json',
            async:false, // 同步请求
            data: {
                ajax: 'pullload',
                pagesize: '4',
                typeid: '3',
                page: '1'
            },
            header: {
                'content-type': 'application/json' // 默认值
            },
            success: function(res) {
                console.log(res);
               var b=res.data.data;
            	/*_this.setData({
                     b:res.data.data
              })*/
            },
            fail: function(err) {
                console.log(err);
                console.log('错误码:' + err.errCode);
                console.log('错误信息:' + err.errMsg);
            }
        });
  return(b);
  console.log(b);
}

这时候我们发现完全获取不到b的值

image.png

解决办法:利用promise

网络请求改成:

const app = getApp();
function ajaxlist(typeid,pagesize,name,page){
      return new Promise(function (resolve, reject) {
    //传递id 和需要的获取的页
    _this=this;
    var page=page || 1,
    typeid=typeid,
    name=name,
    pagesize=pagesize || 8;
         swan.request({
            url:app.gameUrl + '/plus/list_ajax.php',
            method: 'GET',
            dataType: 'json',
            async:false, // 同步请求
            data: {
                ajax: 'pullload',
                pagesize: '4',
                typeid: '3',
                page: '1'
            },
            header: {
                'content-type': 'application/json' // 默认值
            },
            success: function(res) {
               console.log(res);
               var result=res.data.data;
               resolve(result) ;
            },
            fail: function(err) {
                console.log(err);
                console.log('错误码:' + err.errCode);
                console.log('错误信息:' + err.errMsg);
            }
        });
    })
}

module.exports.ajaxlist = ajaxlist;


请求方法改成:

all.ajaxlist(3,3,1).then((res) => { 
      _this.setData({
                  arr : res   
                })
}).catch((res) => { 
     
                 console.log(res);
         
})


简单记忆:resolve 返回,之后代码走then,reject返回,那么代码就会走catch。 请求方法改成:

我们可以把执行GetUserEntity方法之后要执行的代码放在then中,如果GetUserEntity中发起的请求出错那么程序就会通过reject返回信息,

那么我们可以再catch中做相应的处理。


写的好!

微信扫一扫赏大洋