菜单

微信小程序通过api接口将json数据展现到小程序示例

2019年7月28日 - 计算机教程

这是因为, wx.request 这个属性,只有 get 方法而没有 set
方法,我们可以通过 Object.getOwnPropertyDescriptor 验证:

Page({
 data: {
  duration: 2000,
  indicatorDots: true,
  autoplay: true,
  interval: 3000,
  loading: false,
  plain: false
 },
 onLoad: function () {
 var that = this//不要漏了这句,很重要
 wx.request({
  url: 'http://news-at.zhihu.com/api/4/news/latest',
  headers: {
  'Content-Type': 'application/json'
  },
  success: function (res) {
  //将获取到的json数据,存在名字叫zhihu的这个数组中
   that.setData({
   zhihu: res.data.stories,
   //res代表success函数的事件对,data是固定的,stories是是上面json数据中stories

   })
  }
 })


 }
})

不过需要注意的是:如果后续的程序重写了onError的话,将会导致之前注册的onError失效。

<3> index.wxml中

const des = Object.getOwnPropertyDescriptor(wx, 'request');

// des {
// configurable: true,
// enumerable: true,
// get: f(),
// set: undefined
// }
 "date":"20161114",
 "stories":[
  {
   "images":[
    "http://jb51.net.com/76125c357aa7b0ca6c9cbc41b4a5326d.jpg"
   ],
   "type":0,
   "id":8975316,
   "ga_prefix":"111422",
   "title":"小事 · 我和你们一样"
  },
  {
   "images":[
    "http://jb51.net/7c908a5940384123fd88287dbc6a2c98.jpg"
   ],
   "type":0,
   "id":8977438,
   "ga_prefix":"111421",
   "title":"成长嘛,谁说就意味着一定要长大了?"
  },

我们试着更改一下 wx.request

<1> wx.request 请求接口资源(微信小程序api中的发起请求部分)

注意:由于JS的灵活性,修改原生方法是一件很容易的事,然而并不鼓励这样做!

<3>wx:for 循环语句

这时控制台会报错 TypeError: Cannot set property request of
#<Object> which has only a getter

实现知乎客户端的一个重要知识前提就是,要知道怎么通过知乎新闻的接口,来把数据展示到微信小程序端上。

原理

首先,先看一下这个请求函数

小程序的注册函数 App 有个全局的 onError 方法,我们可以在小程序的入口文件
app.js 先注册一个该方法:

看完这个代码,你会想,根据微信小程序的绑定原理,这里边的代码哪里调用了onLoad()这个函数,不用多想,微信小程序给你省略了这些步骤。直接调用zhihu这个数组就行。

您可能感兴趣的文章:

wx.request({
 url: '******', //这里填写你的接口路径
 header: { //这里写你借口返回的数据是什么类型,这里就体现了微信小程序的强大,直接给你解析数据,再也不用去寻找各种方法去解析json,xml等数据了
  'Content-Type': 'application/json'
 },
 data: {//这里写你要请求的参数
  x: '' ,
  y: ''
 },

 success: function(res) {
 //这里就是请求成功后,进行一些函数操作
 console.log(res.data)
 }
})
const originRequest = wx.request;
Object.defineProperty(wx, 'request', {
 configurable: true,
 enumerable: true,
 writable: true,
 value: function() {
  const config = arguments[0] || {};
  const url = config.url;
  if (url.indexOf('http://monitor.com') > -1) {
   // 直接发送请求,不上报
   return originRequest.apply(this, arguments);
  }
  console.log('上报ajax数据啦!');
  wx.request({
   url: 'http://monitor.com/monitor/ajax',
   data: config.data
  })
  return originRequest.apply(this, arguments);
 }
});

2.实现原理

监控异常

<view >
<swiper indicator-dots="{{indicatorDots}}"
 autoplay="{{autoplay}}" class="banners" interval="{{interval}}" duration="{{duration}}">//这里边的属性不重要,看下边
 <block wx:for="{{zhihu}}">
  <swiper-item class="banner" >
   <image src="{{item.image}}" data-id="{{item.b}}" bindtap="bindViewTap" class="banner-image" width="100%" height="100%"/>
   <text class="banner-title">{{item.title}}</text>
  </swiper-item>
 </block>
</swiper>

</view>
wx.request = function() {
 console.log('66666');
}

<2>index.js中

小程序的运行环境并没有 window 和 document 对象,它只暴露了一个 wx
全局对象,发送网络请求则是通过wx.request这个api,因此,这次我们需要拦截的就是
wx.request 方法

1.用到的知识点

总结

您可能感兴趣的文章:

const originRequest = wx.request;
Object.defineProperty(wx, 'request', {
 configurable: true,
 enumerable: true,
 writable: true,
 value: function() {
  const config = arguments[0] || {};
  const url = config.url;
  console.log('发送了ajax,url是: ', url);

  return originRequest.apply(this, arguments);
 }
});

3.代码

平时我们开发,发送ajax一般用的都是封装好的库,例如jQuery,Axios等,然而这些库,底层仍然用的是浏览器原生的XMLHttpRequest对象,因此,我们只需要修改XMLHttpRequest对象即可

分解图

这次就实现拦截功能了!

<2>swiper 实现轮播图的组件

其他事项

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

App({
 onError: function (err) {
 monitor.notifyError(err)
 }
})

图片 1

App({ onError: function(err) {
  console.log('上报错误啦!');
  wx.request({
   url: 'http://monitor.com/monitor/error',
   data: err
  })
 }
})
App({
 // 其他逻辑
})

<1>首先上一段知乎接口数据的json格式中的开头

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图