微信小程序开发笔记之wx.request()的坑——将服务器返回的数据及时显示到视图层
2018-01-18 19:01
796 查看
近期开发微信小程序涉及到wx.request()网络请求,原代码为:
本想在onLoad()函数中获取数据,在onReady()函数中设置刷新数据 ,结果控制台打印的信息却是 undefined,,
items并没有被赋值,什么原因呢?一开始以为是服务器返回的值不符合json数据格式,后来证明没问题。然后分别打印success()函数中的数据和onReady()函数数据,发现程序先执行了success函数
事实是onLoad函数先执行,之后执行onReady函数,这里可能是由于wx.request()是多线程网络请求,所以造成了数据不统一,即赋值给items的temp_data是初始值,并没有将服务器返回的数据赋值给他,
后来改为:
这里注意的是 ,在success函数中调用this.setdata()函数时,不能直接用this调用,应该是在success函数中this指代意义不同,所以将this赋值给me,用me调用,否则会报如图错误。
这样问题就解决了。
// pages/index/home.js var temp_data ; Page({ /** * 页面的初始数据 */ data: { items:[] }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { // 页面初始化后发出新的请求 wx.request({ url: "http://2327.free.ngrok.cc/Note_api/plist", data: { "token": getApp().globalData.userInfo.dev_token, "usertoken": wx.getStorageSync("usertoken") }, method: "POST", header: { "content-type": "application/x-www-form-urlencoded" }, success: function(res){ if(res.data.status == 1){ temp_data = res.data.diaryDatas; }else{ wx.showToast({ title: res.data.message, icon: "loading", duration: 2000 }) } } }) }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { //页面渲染完成 this.setData({ items: temp_data }) } })
本想在onLoad()函数中获取数据,在onReady()函数中设置刷新数据 ,结果控制台打印的信息却是 undefined,,
items并没有被赋值,什么原因呢?一开始以为是服务器返回的值不符合json数据格式,后来证明没问题。然后分别打印success()函数中的数据和onReady()函数数据,发现程序先执行了success函数
事实是onLoad函数先执行,之后执行onReady函数,这里可能是由于wx.request()是多线程网络请求,所以造成了数据不统一,即赋值给items的temp_data是初始值,并没有将服务器返回的数据赋值给他,
后来改为:
/** * 生命周期函数--监听页面加载 */ onLoad: function (options) { // 页面初始化后发出新的请求 var me = this; wx.request({ url: "http://2327.free.ngrok.cc/Note_api/plist", data: { "token": getApp().globalData.userInfo.dev_token, "usertoken": wx.getStorageSync("usertoken") }, method: "POST", header: { "content-type": "application/x-www-form-urlencoded" }, success: function(res){ if(res.data.status == 1){ temp_data = res.data.diaryDatas; console.log(temp_data); me.setData({ items: temp_data }) console.log(me.data.items); }else{ wx.showToast({ title: res.data.message, icon: "loading", duration: 2000 }) } } }) },
这里注意的是 ,在success函数中调用this.setdata()函数时,不能直接用this调用,应该是在success函数中this指代意义不同,所以将this赋值给me,用me调用,否则会报如图错误。
这样问题就解决了。
相关文章推荐
- 微信小程序开发笔记之wx.request()的坑——将服务器返回的数据及时显示到视图层
- 微信小程序wx.request请求回来的数据没有及时显示到页面上
- 微信小程序wx.request接收服务器返回信息
- 微信小程序中wx.request返回不了json数据
- 小程序wx.request通过post方式提交数据给服务器-小程序支付开发教程
- 微信小程序wx.request请求服务器json数据并渲染到页面
- 微信小程序笔记(一)——点击显示或隐藏某一行数据
- 微信小程序wx.request后台数据交互
- 微信小程序--wx.request使用psot传递数据
- 微信小程序入门篇(二)(wx.request的json数据传输)
- 微信小程序数据请求方法wx.request
- 微信小程序开发之常见问题 不在以下合法域名列表中 wx.request合法域名配置
- 微信小程序Swiper+wx.request 数据绑定刷新
- 微信小程序的ajax数据请求wx.request
- iOS开发:过滤网络请求中,服务器返回空值null数据的处理(过滤null显示问题)
- 微信小程序:wx.request之post请求后端无法获取数据的问题
- 微信小程序-wx.request获取数据
- 微信小程序wx.request实现后台数据交互功能分析
- 微信小程序 request返回的数据,模拟成功,但是在安卓机和IOS上都不成功
- 微信小程序- wx.request请求不到数据