微信禁止了使用表单
INPUT[TYPE="FILE"]
上传图片,必须使用微信WEB JSSDK
图片上传,该插件是一张一张
的上传的。过程是这样的上传图片
——>返回图片本地ID
——>根据图片本地ID,获取图片媒体ID
——>服务端根据图片媒体ID下载图片
。web
多张连续上传的时候,由于还未等一张图片获取完媒体ID,而下一张图片又开始请求获取媒体ID,因此会出现卡死问题。解决方案以下:ajax
递归处理 (
推荐
)json定时器处理后端
定义两个变量
var idx =0; var localIds;
分别存储上传序号,记录上传到第几张图片
,本地图片ID数组,即调用微信 WEB JSSDK 的wx.chooseImage()返回的结果
写递归函数实现获取根据图片本地ID,获取图片媒体ID
这个环节。数组
// ID数组 var localIds = null; // 上传序号 var idx = 0; var serverIds=''; wx.ready(function(){ //配置web jssdk经过执行 //调用图片上传接口 wx.chooseImage({//返回本地图片id 也可作为img 路径显示图片 success: function (res) {//上传本地图片成功 localIds = res.localIds;//本地图片id数组,下标从0开始 //调用上传递归函数 wxUploadImg(localIds); } }); /** * [wxUploadImg 获取图片媒体ID 递归函数] * @author 邱先生 * @copyright * @version [V1.0版本] * @date 2016-07-02 * @param {[type]} localIds [本地图片ID数组] * @return {[type]} [description] */ function wxUploadImg(localIds){ wx.uploadImage({//获取图片媒体ID localId: localIds[idx].toString(), // 须要上传的图片的本地ID isShowProgressTips: 1, // 默认为1,显示进度提示 success: function (res) {//获取成功 // 上传序号,上传一张 累计 +1 idx++ //存储图片媒体ID,用,号分割 serverIds+=res.serverId+','; if(idx<localIds.length){//本地图片ID 还没所有获取完图片媒体ID //调用上传递归函数 wxUploadImg(localIds); }else{ //上传序号归零 idx=0; //服务器csrf 验证字符串,若是后端框架没开启csrf,则不须要 var csrf=$('meta[name="csrf-token"]').attr('content'); $.ajax({ url: "服务器端根据图片媒体ID下载图片处理操做地址", type: 'POST', dataType: 'json', data: {_csrf:csrf,serverIds:serverIds}, }) .done(function(data) { console.log("上传成功"); }) .fail(function() { console.log("error"); }) .always(function() { console.log("complete"); }); serverIds=''; return true; } }, fail: function(res){//获取多媒体id失败 返回错误代码 alert("上传失败,msg:"+JSON.stringify(res)); } }); } }