个人案例
- mina开发实用工具
本小程序主要用于展示一些在微信小程序开发中 实用的工具库
mina-tools-client扫码体验
- Y计算器
all in one 的计算能力合集
YCalculator扫码体验
- 求教大学生家教
帮助大学生和家长解决信息不对称的问题
求教大学生家教平台扫码体验
这明显请求没加白名单啊,所以真机上只有打开调试才能正常请求。
小程序有关于引入第三方JS问题;(老板的刀已经摁住.问题已经解决参考请有序入场)当第三方接入 第三方接口调度了wx.request的时候. 请注意 一定要添加域名白名单; 在调试中;不需要任何白名单即可调试成功; -----------------------------------------------------------老板的刀块摁不住了.. T.T!!!! - 需求的场景描述(希望解决的问题) 小程序 因为没有业务接口可以直接获取定位地址的.都要选填.我们要实现自动定位的功能. 也就是一进主页就可以完成自动定位.也就实现这个效果. 以下为配图 但是在测试中出现问题了 [图片] 在测试中. 我们小程序上传了体验版 在正常访问的时候 好像调不出来. 授权之后.. 就再也没了反应.. 如果开启了调试模式 又一切正常.. 关闭调试模式又调不到方法;... 场景如下: [图片]打开调试.正常访问..一切正常.... [图片] 关闭调试. [图片] 仿佛调不到接口似得... 我这都不知道出了什么问题..调试都调不出来.. 在此. 把地图反馈那个接口反馈放上来. 该地图接口为腾讯地图.; 我担心如果上传上去正式 地图调不起来.我本地测试没问题; 在体验版打开小程序调试 [代码]/**[代码][代码] [代码][代码]* 微信小程序JavaScriptSDK[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* @version 1.0[代码][代码] [代码][代码]* @date 2017-01-10[代码][代码] [代码][代码]* @author jaysonzhou@tencent.com[代码][代码] [代码][代码]*/[代码] [代码]var[代码] [代码]ERROR_CONF = {[代码][代码] [代码][代码]KEY_ERR: 311,[代码][代码] [代码][代码]KEY_ERR_MSG: [代码][代码]'key格式错误'[代码][代码],[代码][代码] [代码][代码]PARAM_ERR: 310,[代码][代码] [代码][代码]PARAM_ERR_MSG: [代码][代码]'请求参数信息有误'[代码][代码],[代码][代码] [代码][代码]SYSTEM_ERR: 600,[代码][代码] [代码][代码]SYSTEM_ERR_MSG: [代码][代码]'系统错误'[代码][代码],[代码][代码] [代码][代码]WX_ERR_CODE: 1000,[代码][代码] [代码][代码]WX_OK_CODE: 200[代码][代码]};[代码][代码]var[代码] [代码]BASE_URL = [代码][代码]'https://apis.map.qq.com/ws/'[代码][代码];[代码][代码]var[代码] [代码]URL_SEARCH = BASE_URL + [代码][代码]'place/v1/search'[代码][代码];[代码][代码]var[代码] [代码]URL_SUGGESTION = BASE_URL + [代码][代码]'place/v1/suggestion'[代码][代码];[代码][代码]var[代码] [代码]URL_GET_GEOCODER = BASE_URL + [代码][代码]'geocoder/v1/'[代码][代码];[代码][代码]var[代码] [代码]URL_CITY_LIST = BASE_URL + [代码][代码]'district/v1/list'[代码][代码];[代码][代码]var[代码] [代码]URL_AREA_LIST = BASE_URL + [代码][代码]'district/v1/getchildren'[代码][代码];[代码][代码]var[代码] [代码]URL_DISTANCE = BASE_URL + [代码][代码]'distance/v1/'[代码][代码];[代码][代码]var[代码] [代码]Utils = {[代码][代码] [代码][代码]/**[代码][代码] [代码][代码]* 得到终点query字符串[代码][代码] [代码][代码]* @param {Array|String} 检索数据[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]location2query(data) {[代码][代码] [代码][代码]if[代码] [代码]([代码][代码]typeof[代码] [代码]data == [代码][代码]'string'[代码][代码]) {[代码][代码] [代码][代码]return[代码] [代码]data;[代码][代码] [代码][代码]}[代码][代码] [代码][代码]var[代码] [代码]query = [代码][代码]''[代码][代码];[代码][代码] [代码][代码]for[代码] [代码]([代码][代码]var[代码] [代码]i = 0; i < data.length; i++) {[代码][代码] [代码][代码]var[代码] [代码]d = data[i];[代码][代码] [代码][代码]if[代码] [代码](!!query) {[代码][代码] [代码][代码]query += [代码][代码]';'[代码][代码];[代码][代码] [代码][代码]}[代码][代码] [代码][代码]if[代码] [代码](d.location) {[代码][代码] [代码][代码]query = query + d.location.lat + [代码][代码]','[代码] [代码]+ d.location.lng;[代码][代码] [代码][代码]}[代码][代码] [代码][代码]if[代码] [代码](d.latitude && d.longitude) {[代码][代码] [代码][代码]query = query + d.latitude + [代码][代码]','[代码] [代码]+ d.longitude;[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]return[代码] [代码]query;[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 使用微信接口进行定位[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]getWXLocation(success, fail, complete) {[代码][代码] [代码][代码]wx.getLocation({[代码][代码] [代码][代码]type: [代码][代码]'gcj02'[代码][代码],[代码][代码] [代码][代码]success: success,[代码][代码] [代码][代码]fail: fail,[代码][代码] [代码][代码]complete: complete[代码][代码] [代码][代码]});[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 获取location参数[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]getLocationParam(location) {[代码][代码] [代码][代码]if[代码] [代码]([代码][代码]typeof[代码] [代码]location == [代码][代码]'string'[代码][代码]) {[代码][代码] [代码][代码]var[代码] [代码]locationArr = location.split([代码][代码]','[代码][代码]);[代码][代码] [代码][代码]if[代码] [代码](locationArr.length === 2) {[代码][代码] [代码][代码]location = {[代码][代码] [代码][代码]latitude: location.split([代码][代码]','[代码][代码])[0],[代码][代码] [代码][代码]longitude: location.split([代码][代码]','[代码][代码])[1][代码][代码] [代码][代码]};[代码][代码] [代码][代码]} [代码][代码]else[代码] [代码]{[代码][代码] [代码][代码]location = {};[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]return[代码] [代码]location;[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 回调函数默认处理[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]polyfillParam(param) {[代码][代码] [代码][代码]param.success = param.success || [代码][代码]function[代码] [代码]() { };[代码][代码] [代码][代码]param.fail = param.fail || [代码][代码]function[代码] [代码]() { };[代码][代码] [代码][代码]param.complete = param.complete || [代码][代码]function[代码] [代码]() { };[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 验证param对应的key值是否为空[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* @param {Object} param 接口参数[代码][代码] [代码][代码]* @param {String} key 对应参数的key[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]checkParamKeyEmpty(param, key) {[代码][代码] [代码][代码]if[代码] [代码](!param[key]) {[代码][代码] [代码][代码]var[代码] [代码]errconf = [代码][代码]this[代码][代码].buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key +[代码][代码]'参数格式有误'[代码][代码]);[代码][代码] [代码][代码]param.fail(errconf);[代码][代码] [代码][代码]param.complete(errconf);[代码][代码] [代码][代码]return[代码] [代码]true[代码][代码];[代码][代码] [代码][代码]}[代码][代码] [代码][代码]return[代码] [代码]false[代码][代码];[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 验证参数中是否存在检索词keyword[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* @param {Object} param 接口参数[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]checkKeyword(param){[代码][代码] [代码][代码]return[代码] [代码]![代码][代码]this[代码][代码].checkParamKeyEmpty(param, [代码][代码]'keyword'[代码][代码]);[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 验证location值[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* @param {Object} param 接口参数[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]checkLocation(param) {[代码][代码] [代码][代码]var[代码] [代码]location = [代码][代码]this[代码][代码].getLocationParam(param.location);[代码][代码] [代码][代码]if[代码] [代码](!location || !location.latitude || !location.longitude) {[代码][代码] [代码][代码]var[代码] [代码]errconf = [代码][代码]this[代码][代码].buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + [代码][代码]' location参数格式有误'[代码][代码])[代码][代码] [代码][代码]param.fail(errconf);[代码][代码] [代码][代码]param.complete(errconf);[代码][代码] [代码][代码]return[代码] [代码]false[代码][代码];[代码][代码] [代码][代码]}[代码][代码] [代码][代码]return[代码] [代码]true[代码][代码];[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 构造错误数据结构[代码][代码] [代码][代码]* @param {Number} errCode 错误码[代码][代码] [代码][代码]* @param {Number} errMsg 错误描述[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]buildErrorConfig(errCode, errMsg) {[代码][代码] [代码][代码]return[代码] [代码]{[代码][代码] [代码][代码]status: errCode,[代码][代码] [代码][代码]message: errMsg[代码][代码] [代码][代码]};[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 构造微信请求参数,公共属性处理[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* @param {Object} param 接口参数[代码][代码] [代码][代码]* @param {Object} param 配置项[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]buildWxRequestConfig(param, options) {[代码][代码] [代码][代码]var[代码] [代码]that = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]options.header = { [代码][代码]"content-type"[代码][代码]: [代码][代码]"application/json"[代码] [代码]};[代码][代码] [代码][代码]options.method = [代码][代码]'GET'[代码][代码];[代码][代码] [代码][代码]options.success = [代码][代码]function[代码] [代码](res) {[代码][代码] [代码][代码]var[代码] [代码]data = res.data;[代码][代码] [代码][代码]if[代码] [代码](data.status === 0) {[代码][代码] [代码][代码]param.success(data);[代码][代码] [代码][代码]} [代码][代码]else[代码] [代码]{[代码][代码] [代码][代码]param.fail(data);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]};[代码][代码] [代码][代码]options.fail = [代码][代码]function[代码] [代码](res) {[代码][代码] [代码][代码]res.statusCode = ERROR_CONF.WX_ERR_CODE;[代码][代码] [代码][代码]param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, result.errMsg));[代码][代码] [代码][代码]};[代码][代码] [代码][代码]options.complete = [代码][代码]function[代码] [代码](res) {[代码][代码] [代码][代码]var[代码] [代码]statusCode = +res.statusCode;[代码][代码] [代码][代码]switch[代码][代码](statusCode) {[代码][代码] [代码][代码]case[代码] [代码]ERROR_CONF.WX_ERR_CODE: {[代码][代码] [代码][代码]param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));[代码][代码] [代码][代码]break[代码][代码];[代码][代码] [代码][代码]}[代码][代码] [代码][代码]case[代码] [代码]ERROR_CONF.WX_OK_CODE: {[代码][代码] [代码][代码]var[代码] [代码]data = res.data;[代码][代码] [代码][代码]if[代码] [代码](data.status === 0) {[代码][代码] [代码][代码]param.complete(data);[代码][代码] [代码][代码]} [代码][代码]else[代码] [代码]{[代码][代码] [代码][代码]param.complete(that.buildErrorConfig(data.status, data.message));[代码][代码] [代码][代码]}[代码][代码] [代码][代码]break[代码][代码];[代码][代码] [代码][代码]}[代码][代码] [代码][代码]default[代码][代码]:{[代码][代码] [代码][代码]param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG));[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]return[代码] [代码]options;[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 处理用户参数是否传入坐标进行不同的处理[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]locationProcess(param, locationsuccess, locationfail, locationcomplete) {[代码][代码] [代码][代码]var[代码] [代码]that = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]locationfail = locationfail || [代码][代码]function[代码] [代码](res) {[代码][代码] [代码][代码]res.statusCode = ERROR_CONF.WX_ERR_CODE;[代码][代码] [代码][代码]param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));[代码][代码] [代码][代码]};[代码][代码] [代码][代码]locationcomplete = locationcomplete || [代码][代码]function[代码] [代码](res) {[代码][代码] [代码][代码]if[代码] [代码](res.statusCode == ERROR_CONF.WX_ERR_CODE) {[代码][代码] [代码][代码]param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));[代码][代码] [代码][代码]}[代码][代码] [代码][代码]};[代码][代码] [代码][代码]if[代码] [代码](!param.location) {[代码][代码] [代码][代码]that.getWXLocation(locationsuccess, locationfail, locationcomplete);[代码][代码] [代码][代码]} [代码][代码]else[代码] [代码]if[代码] [代码](that.checkLocation(param)) {[代码][代码] [代码][代码]var[代码] [代码]location = Utils.getLocationParam(param.location);[代码][代码] [代码][代码]locationsuccess(location);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码]}[代码] [代码]class QQMapWX {[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 构造函数[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* @param {Object} options 接口参数,key 为必选参数[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]constructor(options) {[代码][代码] [代码][代码]if[代码] [代码](!options.key) {[代码][代码] [代码][代码]throw[代码] [代码]Error([代码][代码]'key值不能为空'[代码][代码]);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]this[代码][代码].key = options.key;[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* POI周边检索[代码][代码] [代码][代码]*[代码][代码] [代码][代码]* @param {Object} options 接口参数对象[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* 参数对象结构可以参考[代码][代码] [代码][代码]* @see http://lbs.qq.com/webservice_v1/guide-search.html[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]search(options) {[代码][代码] [代码][代码]var[代码] [代码]that = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]options = options || {};[代码] [代码] [代码][代码]Utils.polyfillParam(options);[代码] [代码] [代码][代码]if[代码] [代码](!Utils.checkKeyword(options)) {[代码][代码] [代码][代码]return[代码][代码];[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]var[代码] [代码]requestParam = {[代码][代码] [代码][代码]keyword: options.keyword,[代码][代码] [代码][代码]orderby: options.orderby || [代码][代码]'_distance'[代码][代码],[代码][代码] [代码][代码]page_size: options.page_size || 10,[代码][代码] [代码][代码]page_index: options.page_index || 1,[代码][代码] [代码][代码]output: [代码][代码]'json'[代码][代码],[代码][代码] [代码][代码]key: that.key[代码][代码] [代码][代码]};[代码] [代码] [代码][代码]if[代码] [代码](options.address_format) {[代码][代码] [代码][代码]requestParam.address_format = options.address_format;[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]if[代码] [代码](options.filter) {[代码][代码] [代码][代码]requestParam.filter = options.filter;[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]var[代码] [代码]distance = options.distance || [代码][代码]"1000"[代码][代码];[代码][代码] [代码][代码]var[代码] [代码]auto_extend = options.auto_extend || 1;[代码] [代码] [代码][代码]var[代码] [代码]locationsuccess = [代码][代码]function[代码] [代码](result) {[代码][代码] [代码][代码]requestParam.boundary = [代码][代码]"nearby("[代码] [代码]+ result.latitude + [代码][代码]","[代码] [代码]+ result.longitude + [代码][代码]","[代码] [代码]+ distance + [代码][代码]","[代码] [代码]+ auto_extend +[代码][代码]")"[代码][代码];[代码][代码] [代码][代码]wx.request(Utils.buildWxRequestConfig(options, {[代码][代码] [代码][代码]url: URL_SEARCH,[代码][代码] [代码][代码]data: requestParam[代码][代码] [代码][代码]}));[代码][代码] [代码][代码]}[代码][代码] [代码][代码]Utils.locationProcess(options, locationsuccess);[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* sug模糊检索[代码][代码] [代码][代码]*[代码][代码] [代码][代码]* @param {Object} options 接口参数对象[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* 参数对象结构可以参考[代码][代码] [代码][代码]* http://lbs.qq.com/webservice_v1/guide-suggestion.html[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]getSuggestion(options) {[代码][代码] [代码][代码]var[代码] [代码]that = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]options = options || {};[代码][代码] [代码][代码]Utils.polyfillParam(options);[代码] [代码] [代码][代码]if[代码] [代码](!Utils.checkKeyword(options)) {[代码][代码] [代码][代码]return[代码][代码];[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]var[代码] [代码]requestParam = {[代码][代码] [代码][代码]keyword: options.keyword,[代码][代码] [代码][代码]region: options.region || [代码][代码]'全国'[代码][代码],[代码][代码] [代码][代码]region_fix: options.region_fix || 0,[代码][代码] [代码][代码]policy: options.policy || 0,[代码][代码] [代码][代码]output: [代码][代码]'json'[代码][代码],[代码][代码] [代码][代码]key: that.key[代码][代码] [代码][代码]};[代码][代码] [代码][代码]wx.request(Utils.buildWxRequestConfig(options, {[代码][代码] [代码][代码]url: URL_SUGGESTION,[代码][代码] [代码][代码]data: requestParam[代码][代码] [代码][代码]}));[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 逆地址解析[代码][代码] [代码][代码]*[代码][代码] [代码][代码]* @param {Object} options 接口参数对象[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* 请求参数结构可以参考[代码][代码] [代码][代码]* http://lbs.qq.com/webservice_v1/guide-gcoder.html[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]reverseGeocoder(options) {[代码][代码] [代码][代码]var[代码] [代码]that = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]options = options || {};[代码][代码] [代码][代码]Utils.polyfillParam(options);[代码][代码] [代码][代码]var[代码] [代码]requestParam = {[代码][代码] [代码][代码]coord_type: options.coord_type || 5,[代码][代码] [代码][代码]get_poi: options.get_poi || 0,[代码][代码] [代码][代码]output: [代码][代码]'json'[代码][代码],[代码][代码] [代码][代码]key: that.key[代码][代码] [代码][代码]};[代码][代码] [代码][代码]if[代码] [代码](options.poi_options) {[代码][代码] [代码][代码]requestParam.poi_options = options.poi_options[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]var[代码] [代码]locationsuccess = [代码][代码]function[代码] [代码](result) {[代码][代码] [代码][代码]requestParam.location = result.latitude + [代码][代码]','[代码] [代码]+ result.longitude;[代码][代码] [代码][代码]wx.request(Utils.buildWxRequestConfig(options, {[代码][代码] [代码][代码]url: URL_GET_GEOCODER,[代码][代码] [代码][代码]data: requestParam[代码][代码] [代码][代码]}));[代码][代码] [代码][代码]};[代码][代码] [代码][代码]Utils.locationProcess(options, locationsuccess);[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 地址解析[代码][代码] [代码][代码]*[代码][代码] [代码][代码]* @param {Object} options 接口参数对象[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* 请求参数结构可以参考[代码][代码] [代码][代码]* http://lbs.qq.com/webservice_v1/guide-geocoder.html[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]geocoder(options) {[代码][代码] [代码][代码]var[代码] [代码]that = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]options = options || {};[代码][代码] [代码][代码]Utils.polyfillParam(options);[代码] [代码] [代码][代码]if[代码] [代码](Utils.checkParamKeyEmpty(options, [代码][代码]'address'[代码][代码])) {[代码][代码] [代码][代码]return[代码][代码];[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]var[代码] [代码]requestParam = {[代码][代码] [代码][代码]address: options.address,[代码][代码] [代码][代码]output: [代码][代码]'json'[代码][代码],[代码][代码] [代码][代码]key: that.key[代码][代码] [代码][代码]};[代码] [代码] [代码][代码]wx.request(Utils.buildWxRequestConfig(options, {[代码][代码] [代码][代码]url: URL_GET_GEOCODER,[代码][代码] [代码][代码]data: requestParam[代码][代码] [代码][代码]}));[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 获取城市列表[代码][代码] [代码][代码]*[代码][代码] [代码][代码]* @param {Object} options 接口参数对象[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* 请求参数结构可以参考[代码][代码] [代码][代码]* http://lbs.qq.com/webservice_v1/guide-region.html[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]getCityList(options) {[代码][代码] [代码][代码]var[代码] [代码]that = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]options = options || {};[代码][代码] [代码][代码]Utils.polyfillParam(options);[代码][代码] [代码][代码]var[代码] [代码]requestParam = {[代码][代码] [代码][代码]output: [代码][代码]'json'[代码][代码],[代码][代码] [代码][代码]key: that.key[代码][代码] [代码][代码]};[代码] [代码] [代码][代码]wx.request(Utils.buildWxRequestConfig(options, {[代码][代码] [代码][代码]url: URL_CITY_LIST,[代码][代码] [代码][代码]data: requestParam[代码][代码] [代码][代码]}));[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 获取对应城市ID的区县列表[代码][代码] [代码][代码]*[代码][代码] [代码][代码]* @param {Object} options 接口参数对象[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* 请求参数结构可以参考[代码][代码] [代码][代码]* http://lbs.qq.com/webservice_v1/guide-region.html[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]getDistrictByCityId(options) {[代码][代码] [代码][代码]var[代码] [代码]that = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]options = options || {};[代码][代码] [代码][代码]Utils.polyfillParam(options);[代码] [代码] [代码][代码]if[代码] [代码](Utils.checkParamKeyEmpty(options, [代码][代码]'id'[代码][代码])) {[代码][代码] [代码][代码]return[代码][代码];[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]var[代码] [代码]requestParam = {[代码][代码] [代码][代码]id: options.id || [代码][代码]''[代码][代码],[代码][代码] [代码][代码]output: [代码][代码]'json'[代码][代码],[代码][代码] [代码][代码]key: that.key[代码][代码] [代码][代码]};[代码] [代码] [代码][代码]wx.request(Utils.buildWxRequestConfig(options, {[代码][代码] [代码][代码]url: URL_AREA_LIST,[代码][代码] [代码][代码]data: requestParam[代码][代码] [代码][代码]}));[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]/**[代码][代码] [代码][代码]* 用于单起点到多终点的路线距离(非直线距离)计算:[代码][代码] [代码][代码]* 支持两种距离计算方式:步行和驾车。[代码][代码] [代码][代码]* 起点到终点最大限制直线距离10公里。[代码][代码] [代码][代码]*[代码][代码] [代码][代码]* @param {Object} options 接口参数对象[代码][代码] [代码][代码]* [代码][代码] [代码][代码]* 请求参数结构可以参考[代码][代码] [代码][代码]* http://lbs.qq.com/webservice_v1/guide-distance.html[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]calculateDistance(options) {[代码][代码] [代码][代码]var[代码] [代码]that = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]options = options || {};[代码][代码] [代码][代码]Utils.polyfillParam(options);[代码] [代码] [代码][代码]if[代码] [代码](Utils.checkParamKeyEmpty(options, [代码][代码]'to'[代码][代码])) {[代码][代码] [代码][代码]return[代码][代码];[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]var[代码] [代码]requestParam = {[代码][代码] [代码][代码]mode: options.mode || [代码][代码]'walking'[代码][代码],[代码][代码] [代码][代码]to: Utils.location2query(options.to),[代码][代码] [代码][代码]output: [代码][代码]'json'[代码][代码],[代码][代码] [代码][代码]key: that.key[代码][代码] [代码][代码]};[代码] [代码] [代码][代码]var[代码] [代码]locationsuccess = [代码][代码]function[代码] [代码](result) {[代码][代码] [代码][代码]requestParam.from = result.latitude + [代码][代码]','[代码] [代码]+ result.longitude;[代码][代码] [代码][代码]wx.request(Utils.buildWxRequestConfig(options, {[代码][代码] [代码][代码]url: URL_DISTANCE,[代码][代码] [代码][代码]data: requestParam[代码][代码] [代码][代码]}));[代码][代码] [代码][代码]}[代码][代码] [代码][代码]if[代码] [代码](options.from) {[代码][代码] [代码][代码]options.location = options.from;[代码][代码] [代码][代码]}[代码][代码] [代码] [代码] [代码][代码]Utils.locationProcess(options, locationsuccess);[代码][代码] [代码][代码]}[代码][代码]}[代码] [代码]module.exports = QQMapWX;[代码] - 希望提供的能力 出现这情况 .不知道怎么解决了!
2019-02-15同求,真机在网络良好的情况下,利用open-data无法获取头像。
用open-data获取头像失败网络通的情况下,用open-data组件获取头像失败;重新启动小程序也是获取不到,手机重启后显示才正常 - 当前 Bug 的表现(可附上截图) [图片] 正常显示: [图片]
2019-01-28唉,18年2月份的帖子,官方到现在没给答复啊
音频播放概率性失败请教一下,我现在使用 wx.createInnerAudioContext 这个接口,进行播放mp3格式的音频文件,src是http://www.xxx.com/xxx.mp3, 现在经常出现点了不播方法,触发了onplay事件(输出了onplay is running),但是不触发onended事件(未输出onEnded is running) 情况(也没有声音) 我在开发工具中怎么点都能播放,在真机上就概率性(较大概率)出现上述情况 手机是iPhonese。 麻烦指导下 [代码]const app = getApp();[代码][代码]const recorderManager = wx.getRecorderManager();[代码][代码]const innerAudioContext = wx.createInnerAudioContext();[代码][代码]var[代码] [代码]util = require([代码][代码]'../../utils/util.js'[代码][代码]);[代码][代码]Page({[代码][代码] [代码][代码]。。。。。[代码][代码] [代码][代码]//语音播放[代码][代码] [代码][代码]audioPlay: [代码][代码]function[代码] [代码](e) {[代码][代码] [代码][代码]var[代码] [代码]that = [代码][代码]this[代码][代码],[代码][代码] [代码][代码]innerAudioContext.stop();[代码][代码] [代码][代码]innerAudioContext.src = url;[代码][代码] [代码][代码]innerAudioContext.play();[代码][代码] [代码][代码]}[代码][代码] [代码][代码]},[代码][代码]onLoad: [代码][代码]function[代码] [代码](options) {[代码][代码] [代码][代码]var[代码] [代码]that = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]/***音频组件开始 */[代码][代码] [代码][代码]innerAudioContext.obeyMuteSwitch = [代码][代码]false[代码][代码];[代码][代码] [代码][代码]innerAudioContext.onPlay(() => {[代码][代码] [代码][代码]console.log([代码][代码]"onplay is running"[代码][代码])[代码][代码] [代码][代码]var[代码] [代码]i = that.data.i;[代码][代码] [代码][代码]that.setData({[代码][代码] [代码][代码]playID: i[代码][代码] [代码][代码]});[代码][代码] [代码][代码]})[代码][代码] [代码][代码]innerAudioContext.onEnded(() => {[代码][代码] [代码][代码]console.log([代码][代码]"onEnded is running"[代码][代码])[代码][代码] [代码][代码]var[代码] [代码]i = that.data.i;[代码][代码] [代码][代码]if[代码] [代码](that.data.playID > -1) {[代码][代码] [代码][代码]that.setData({[代码][代码] [代码][代码]playID: -1[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码]}[代码][代码]})[代码]
2019-01-28真的是奇怪,模拟器上声音有,但偶尔又没有,真机测试直接一点声音也没有,真机上连onplay和onerror中的log都没有。
小程序播放声音时的路径问题感觉小程序的路径一直很混乱,页面跳转吧我的感觉是绝对路径不行,要相对的。今天播放声音在模拟器上是可以的,但手机上不行,网上也没有个说法,突然尝试换成绝对路径又可以了。话说官方给不能给个说法这路径我们别靠猜呀。 有问题的代码,相对路径下 createInnerAudioContext模拟器,真机都不行, wx.createAudioContext('myAudio') 模拟器可以,真机不行。 [图片] 可以的代码 [图片]
2019-01-28对的,用API去修改navigation颜色,背景色就必须要填,然后就没有透明的效果了,还不能用rgba,我觉得这是一个bug,微信官方应该要改一下这个API,或者直接出一个控制statusBar颜色的API。
导航栏在微信7.0真机下显示异常!!!状态栏为白色[图片] - 预期表现 但在app.json文件中开启了"navigationStyle": "custom",手机导航栏(状态栏)是全透明状态; 小程序默认展示也没有问题,但是当wx.setNavigationBarColor后状态栏就变为白色; 在开发工具预览没有问题,在真机预览就有问题(所有微信7.0手机,无论苹果或安卓); - 复现路径 打开上面代码片段; 生成二维码在手机进行预览; 向下滑动屏幕(状态栏就会变为白色);
2019-01-06没有官方给个解释吗?是不是bug啊,是bug的话我就不纠结了
"navigationStyle": "custom" 后,真机无法全屏当我在app.json里设置"navigationStyle": "custom" 后, 真机测试时,无法使用height:100% 达到全屏效果,模拟器正常。 代码如下: [图片] [图片] [图片] [图片] 真机效果: 型号:mix3 微信版本:7.0.0 WeChatLib:2.4.4 [图片] 底部无法完全覆盖page(底部粉红色的部分), "navigationStyle": "custom" 去掉之后就正常了。 这是个bug?
2019-01-05statusBar的字体颜色是跟随navigationBar的,所以想要让statusBar 的字体颜色改变只要设置那navigation的字体颜色,即: [代码]"navigationBarTextStyle": "black",[代码]这样statusBar 的字体颜色就变黑了 [图片]
关于安卓下自定义的 navigationBar 无法自定义状态栏颜色- 需求的场景描述(希望解决的问题) 安卓的沉浸模式可以使系统的状态栏颜色随着当前打开应用的顶部的颜色变化。但是配置项中设置了 navigationStyle: custom 之后,即使自定义的 navigationBar 只有一个颜色,安卓系统的顶部状态栏的颜色一直保持白色。 - 希望提供的能力 跟随新设置的颜色进行变化。 我理解可能因为有的开发者并不是设置单一颜色的,比如渐变或者是背景图片。但是希望官方能给个设置颜色的api,例如:wx.setStatusBarBgColor 这类的。只有一个白色的背景灵活度相当的低。
2018-12-23数据层每个数据多加个字段isShow吧,通过wx:if去判断渲染,删除只是改变isSHow,这样就不会继承样式了。
求教:组件作为列表子项渲染,组件删除下一个组件会继承删除组件样式具体情况是这样的: 一个收货地址列表,列表里的每项是一个组件(就是列表渲染的是组件),组件里面的删除操作是滑屏后显示删除按钮后,再点击删除才能删除(就是删除按钮一开始在可视范围外,具体看交互看图片)。 现在,我对中间的地址项进行删除操作(这时候这个子项添加了css的transform: translate(-120rpx, 0)来显示删除按钮)。这时候点击删除功能是正常,但下一个组件竟然继承了这个子项的css偏移量(就是下一个组件的删除按钮竟然直接显示而不需要滑动了)。 删除实现方式: 组件点击删除后,通过that.triggerEvent("delAddress", {id: id});交给父级操作ListData数据去删除这个组件的数据(删除功能是正常的,但css会被继承)。 已测试操作: 对wx:key进行了增加和删除测试,但问题还是存在。 具体图片: [图片] [图片] [图片] 具体的组件的代码: // component/footer/footer.js var app = getApp(); // var state = { //怕用户一直双击或者ajax速度慢等问题,防止双击,目前代码已经注释,但还是有这个问题 // sw: { // delAjaxIng: false // } // }; Component({ /** * 组件的属性列表 */ properties: { itemData: { type: Object, value: { id: 10, consignee: "李四", region_id: 0, is_default: 0, phone: "150****123", street: "广东省广州市天河区天河路xxx" } } }, /** * 组件的初始数据 */ data: { delW: 0, //控制滑动多少实现偏移,因为rpx转设备实际像素,所以需要转换 startX: 0, //touchstart时的坐标,根据可视范围记录 moveX: 0, //touchmove时的坐标,根据可视范围记录 endX: 0, //touchend时的坐标,根据可视范围记录 transformCss: "transform: translate(0rpx, 0)", //视图的根据这个样式进行渲染的 transitionCss: "", isTouchMove: false, //开发时发现,直接点击页面会跳过touchmove事件 }, ready: function () { this.setData({ delW: Math.ceil(winInfo.windowWidth / 750 * 120 * 1.8), }); }, /** * 组件的方法列表 */ methods: { detached: function() { console.log("ddddddddddd") }, delAddress: function() { var that = this; // if (state.sw.delAjaxIng) { // return false; // } var id = that.data.itemData.id; var url = '/shipping_address/delete_shipping_address'; //state.sw.delAjaxIng = true; //ajax进行了封装,方便公用。默认Post方式提交 app.Lyj.fn.ajax({ url: url, data: { id: id } }).then(function (rec) { //state.sw.delAjaxIng = false; var fullData = rec || {}; var respData = fullData.data || {}; var data = respData.data || {}; console.log(data) if (respData.code == 200) { that.triggerEvent("delAddress", {id: id}); } else { wx.showToast({ icon: "none", title: respData.message, }); } }, function () { //state.sw.delAjaxIng = false; }); }, touchStart: function (e) { this.setData({ startX: e.touches[0].clientX, transitionCss: "" //需要清空transition }); //console.log("start", e.touches[0].clientX); }, touchMove: function (e) { var endX = this.data.endX; var moveX = e.touches[0].clientX; this.setData({ isTouchMove: true, moveX: moveX, transformCss: "transform: translate(" + (moveX - this.data.startX + endX) + "rpx, 0);" }); }, touchEnd: function (e) { //直接点击会不触发touchmove if (!this.data.isTouchMove) { return false; } var x = this.data.moveX - this.data.startX; var endX = this.data.endX; var absX = Math.abs(x); var delW = this.data.delW; //console.log("xxxxx:" + x, "startX:" + this.data.startX, "moveX:" + this.data.moveX, "endX:" + endX, "delW:" + delW) this.setData({ startX: 0, transitionCss: "transition: all .4s;" }); if (endX < 0) { if (x < 0) { x = endX; this.setData({ transformCss: "transform: translate(" + x + "rpx, 0);", endX: x }); } else { if (x >= delW) { x = 0; this.setData({ transformCss: "transform: translate(" + x + "rpx, 0);", endX: x }); } else { x = -120; this.setData({ transformCss: "transform: translate(" + x + "rpx, 0);", endX: x }); } } } else { if (x >= 0) { x = 0; this.setData({ transformCss: "transform: translate(" + x + "rpx, 0);", endX: x }); } else { if (absX > delW) { x = -120; this.setData({ transformCss: "transform: translate(" + x + "rpx, 0);", endX: x }); } else { x = 0; this.setData({ transformCss: "transform: translate(" + x + "rpx, 0);", endX: x }); } } } } } }) 希望遇到过此问题或者知道是什么原因触发此问题的各位指教下。。。提前谢谢了~~
2018-12-20我也有这个问题,对比了canvas和图片,发现canvas上是正常的,生成图片的时候也就是用canvasToTempFilePath产生的问题,目前我是在原有生成图片的函数的基础上用setTimeout 500ms后去生成,暂时没出现样式不一致的错误
小程序在手机上绘制canvas,文字大小、颜色、位置错乱。- 当前 Bug 的表现(可附上截图) 测试用机(oppo r9s、iphone 8 plus) 在手机上使用canvas绘制文字。使用wx.canvasToTempFilePath转为图片后,文字的大小、颜色、位置会出现错乱,错乱频率较高 - 提供一个最简复现 Demo wechatide://minicode/d39sWyme7N3E 使用手机预览代码片段,多次点击绘制按钮可复现。
2018-11-02接口10月10号之后不能调用了,时间改过了。具体参看下面的链接。公众号的时间是错的。 https://developers.weixin.qq.com/community/develop/doc/0000447a5b431807af57249a551408?highLine=%25E5%2588%2586%25E4%25BA%25AB%25E5%259B%259E%25E8%25B0%2583%25E6%2588%2590%25E5%258A%259F
onShareAppMessage的回调问题我用wx.getSystemInfo+ res.SDKVersion打印出真机的基础库是2.2.2(小米Note3), 然后使用onShareAppMessage进行分享的设置,分享给个人后, 分享成功后回调 {“errMsg”:"shareAppMessage:ok"} 分享失败后有回调 {“errMsg”:"shareAppMessage:fail cancel"} 所以想问第一个问题:不是说 7月5日起新提交发布的版本,用户从小程序、小游戏中分享消息给好友时,开发者将无法获知用户是否分享完成,也无法在分享后立即获得群ID。该调整将在最新版开发者工具生效,可以等待基础库 2.0.8版本预先体验。 那为什么还有分享后的回调?shareAppMessage:ok这难道不是表示分享完成的意思吗?? 第二个问题是为什么有些微信小游戏还能区分分享到群还是个人,比如海盗来了,这个小游戏还是可以区分分享到群还是个人的?但是不是说7.5号开始提交的版本,就无法获取群ID了吗,所以它们到底怎么做到的,微信小程序使用的基础库不是依赖于微信客户端的版本号吗?那按道理,这个微信小游戏在我的真机,基础库版本是2.2.2是无法使用2.0.8以下的API了,那按照道理,不是无法获取到群ID了吗?
2018-09-28