h5/小程序直接读本地/在线的json文件数据

H5:

// 报名人数读取 js/huchao_enroll.json 的 shehui

$(function() {

function renderEnrollNums(total) {

var s = String(Math.max(0, Math.floor(Number(total) || 0)));

var html = '';

for (var i = 0; i < s.length; i++) {

html += '<span class="city-enroll-num">' + s[i] + '</span>';

}

$('#enrollNums').html(html);

}

$.getJSON('js/huchao_enroll.json')

.done(function(data) {

renderEnrollNums(parseInt(data && data.shehui, 10) || 0);

})

.fail(function() {

$('#enrollNums').html('');

});

});

小程序:

// p

// 报名人数 = xxx.json 的 count(数值) + api/topic/1/s 的 total

var util = require('../../utils/util.js')

const DEFAULT_ENROLL_COUNT = 0

const REMOTE_ENROLL_JSON_URL =

'https://666.json'

const CARNIVAL_TOPIC_ID = 1

Page({

data: {

enrollCount: DEFAULT_ENROLL_COUNT,

enrollDigits: ['0'],

currentNav: 'hunhe',

},

goBack() {

wx.navigateBack()

},

onLoad(options) {

this._jsonCount = null

this._apiCount = null

this.applyEnrollCount(DEFAULT_ENROLL_COUNT)

this.loadRemoteEnrollCount()

this.loadTopicRegistrationStats()

},

/** 合并两处数据源后刷新展示 */

refreshEnrollSum() {

var j = this._jsonCount == null ? 0 : this._jsonCount

var a = this._apiCount == null ? 0 : this._apiCount

this.applyEnrollCount(j + a)

},

applyEnrollCount(n) {

const num = Math.max(0, parseInt(n, 10) || 0)

const digits = String(num).split('')

this.setData({ enrollCount: num, enrollDigits: digits })

},

loadRemoteEnrollCount() {

const url =

REMOTE_ENROLL_JSON_URL +

(REMOTE_ENROLL_JSON_URL.indexOf('?') >= 0 ? '&' : '?') +

'_t=' +

Date.now()

wx.request({

url,

method: 'GET',

success: (res) => {

if (res.statusCode !== 200 || res.data == null) {

this._jsonCount = 0

this.refreshEnrollSum()

return

}

let count = null

const d = res.data

if (typeof d === 'number') count = d

else if (typeof d === 'object' && d.count !== undefined) count = d.count

else if (typeof d === 'string') {

try {

const o = JSON.parse(d)

if (o && o.count !== undefined) count = o.count

} catch (e) {

count = parseInt(d, 10)

}

}

if (count !== null && count !== undefined && !isNaN(Number(count))) {

this._jsonCount = Math.max(0, parseInt(count, 10) || 0)

} else {

this._jsonCount = 0

}

this.refreshEnrollSum()

},

fail: () => {

this._jsonCount = 0

this.refreshEnrollSum()

},

})

},

loadTopicRegistrationStats() {

util

.getTopicRegistrationStats({ id: CARNIVAL_TOPIC_ID })

.then((r) => {

if (r && r.status && r.data && r.data.registration_total != null) {

var t = r.data.registration_total

this._apiCount = Math.max(0, parseInt(t, 10) || 0)

} else {

this._apiCount = 0

}

this.refreshEnrollSum()

})

.catch(() => {

this._apiCount = 0

this.refreshEnrollSum()

})

},

onNavTap(e) {

const nav = e.currentTarget.dataset.nav

if (nav) {

this.setData({ currentNav: nav })

}

},

onReady() {},

onShow() {},

onHide() {},

onUnload() {},

onPullDownRefresh() {},

onReachBottom() {},

onShareAppMessage() {},

})

相关推荐
和科比合砍81分2 小时前
【无标题】
前端
Z_Wonderful2 小时前
Qiankun 微前端(React+Vue)基础速通webpack
前端·vue.js·react.js
史迪仔01122 小时前
[QML] Popup 与 Dialog
开发语言·前端·javascript·c++·qt
虹科网络安全2 小时前
艾体宝洞察|NPM供应链攻击:复杂的多链加密货币攻擊渗透流行软件包
前端·npm·node.js
nujnewnehc7 小时前
ps, ai, ae插件都可以用html和js开发了
前端·javascript
Jagger_10 小时前
整洁架构三连问:是什么,怎么做,为什么要用
前端
一个处女座的程序猿O(∩_∩)O10 小时前
React 完全入门指南:从基础概念到组件协作
前端·react.js·前端框架