在实现微信多图片上传的时候,我们总会遇到异步请求的问题,由于我们往往不可能在chooseImage的时候就开始上传图片,所以我们需要把localIds和serverId保存下来,但是在wx.chooseImage和uploadImage两个方法中都是异步请求的,我们在success的function中存储数据,然后在ajax外立即又调用了这个数据,则该数据是没有值或为默认值的,因为请求已经提交,不等服务器返回结果就立马往下执行,所以此时的保存的数据肯定不存在

##选择图片
    wx.chooseImage({
 sizeType: ['original','compressed'],// 可以指定是原图还是压缩图,默认二者都有
    sourceType: ['album','camera'],// 可以指定来源是相册还是相机,默认二者都有
    success: function (res) {
     var localIds_arr = res.localIds; //如果此处用全局变量存储,然后在这个chooseImage结束以后立马调用这个全局变量,就会发现里面是没有值或者是你自己初始化的一个值。因为ajax的请求是异步的,在提交请求成功后还未返回结果就已经开始往下执行,也就意味着,在此处的function中res参数还没有返回值的时候,已经开始往下执行了,而success则做了处理,有值得时候会执行里面的代码,当然我们可以写一个检测函数,检测你定义的全局变量是否有变化,如果有再执行相应代码,但这并不是特别理想的做法。为此我直接在success里面做处理,等有了返回值的时候,将这些内容展示出来(显示图片),如下
     // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片

   $.each(localIds_arr,function(i) {      
    $('#picture_show').append("<div class='div_pic' style='display:inline-block;position: relative;' ><img class='delete_picture' src='barcodegen/html/delete.png' style='position: absolute;right: 0;'/><img class='sigle_picture sigle_picture_small' src='"+ localIds_arr[i]+"'/></div>");
//等我需要上传图片的时候,我再通过获取这些图片的SRC属性来上传
   });

  }
});
##上传图片
//上传图片也是如此,我们获取的serverid到底该如何存储并传给后台?如果直接用一个全局变量数组来存储,必然导致该数组第一次传进后台为你定义的初始值,第二次上传(重复上传),才会把第一次请求的值传给后台,这个结果是可以预见的,如果没有每次上传完都把内容清理的话

//我的做法是串行上传,下载

 var current_pic;

mui('body').on('tap','#commit_check',function(){//当点击上传按钮
        var localIds=$('#picture_show .sigle_picture');//获取之前添加的img标签
        var localIds_arr=new Array();
        $.each(localIds,function(i){
            var cur_src=$(this).attr('src');
            localIds_arr.push(cur_src);

        })
if(localIds_arr.length>0)//如果有选择照片,则允许上传
{

uploadToWeixin(localIds_arr);

}

    function uploadToWeixin(arr) {

current_pic=arr.pop();//删除并返回数组最后一个元素
wx.uploadImage({
    localId: current_pic,// 需要上传的图片的本地ID,由chooseImage接口获得
    isShowProgresstips: 1,// 默认为1,显示进度提示
    success: function (res) {

      serverId = res.serverId; // 返回图片的服务器端ID,保存下来

      download_pic(serverId);//直接在此处执行下载,把图片从微信服务器上下载下来,每上传一张图片,就下载一张图片,具体下载代码这里就不贴出来了


    }
});

       if(arr.length>0)//如果还有照片则继续上传
{

 uploadToWeixin(arr);//串行上传照片

}

    }

微信开发 异步批量上传下载图片的更多相关文章

  1. 基于Swift语言开发微信、QQ和微博的SSO授权登录代码分析

    一,总体架构1,引入第三方库除了必须引入对应的登录SDK外,额外引入了SDWebImage,SVProgressHUD,看名字大家都明白吧,引入登录SDK请各自看官方的开发文档,需要加入什么系统库文件,需要配置OtherLinkerFlags等,请参考各自官方文档即可;2,配置连接桥文件因为创建的工程是基于Swift语言,目前官方SDK和其它三方库都是用OC写的,所以为了在swift中调用oc代码

  2. swift分享到微信

    申请微信开发平台AppId地址:open.weixin.qq.com下载微信终端sdk文件包括以下文件:将sdk文件导入到工程4.微信开放平台新增了微信模块用户统计功能,便于开发者统计微信功能模块的用户使用和活跃情况。BuildSettings->All->SearchPaths7.在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URLtype“添加“URLscheme”为你所注册的应用程序id。8.注册AppId9.编写代码调试的时候必须装有微信才行!!!

  3. swift 移动支付之【微信支付】开发步骤

    //向微信注册WXApi.registerapp2.发送预支付数据预支付数据由后台返回,格式如下[plain]viewplaincopyprint?{"appid":"wxxxxxxxxxxx","noncestr":"Hk8dsZoMOdTXGjkJ","package":"Sign=WXPay","partnerid":"01001010110","prepayid":"wx2016050000000000000000000000","sign":"B4879FFFA8B65522A04034E2D0

  4. 基于Swift语言开发微信、QQ跟微博的SSO授权登录代码分析

    转自:http://www.myexception.cn/swift/1991018.html前言Swift语言,怎么说呢,有一种先接受后排斥,又欢迎的感觉,纵观国外大牛开源框架或项目演示,Swift几乎占据了多半,而国内虽然出现很多相关技术介绍和教程,但是在真正项目开发中使用的占据很少部分,原因一是目前熟练它的开发者并不多,二是版本不太稳定,还需要更成熟可靠的版本支持,但总之未来还是很有前景的,

  5. 比较完整的微信开发php代码

    这篇文章主要为大家介绍了比较完整的微信开发php代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  6. node.js 微信开发之定时获取access_token

    本文给大家分享的是在使用node.js做微信开发的过程中如何定时获取access_token的方法,有需要的小伙伴可以参考下

  7. 微信开发 微信授权详解

    这篇文章主要介绍了微信开发 微信授权详解的相关资料,需要的朋友可以参考下

  8. 完美利用Yii2微信后台开发的系列总结

    Yii2是一个高性能,基于组件的 PHP 框架,这篇文章详细的给大家介绍了利用Yii2开发微信后台。我们一起来看看。

  9. php微信公众账号开发之前五个坑(一)

    这篇文章主要为大家详细介绍了php微信公众账号开发之前五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. node.js微信公众平台开发教程

    这篇文章主要为大家分享了node.js微信公众平台开发教程,如何进行微信开发,感兴趣的小伙伴们可以参考一下

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部