解决ajax获取流文件乱码问题
问题描述
----
开发过程中遇到通过ajax访问后台获取图片验证码
接口会返回乱码
另外下载zip图片包的时候也是返回一堆乱码
一开始采用的方法是通过ajax访问接口拿到返回的结果,结果是上图乱码,后面发现直接在img src属性里填写接口就可以直接拿到
但是我们的接口都是经过签名的,所以最后的方法是将接口地址和参数地址拼接返回,js将src替换成返回的url这个时候就完美的解决了问题
大概的代码如下
//获取图片验证码 getCodeImg: function(param) { //只对type进行签名,然后进行拼接 var param = _bale.pack("img", param); var parameters = "?"; for (var key in param) { parameters += key + "=" + param[key] + "&"; } parameters = parameters.substr(0, parameters.length - 1); //编码因为paramMap={"type":""}的{}在liunx无法使用 parameters = encodeURI(parameters); var url = _mm.getServerUrl("sso", ""); return url + "/common/getCodeImg" + parameters; }
//请求url
var url = _orderApi.getCodeImg(imgParam); $("#imgCode").attr("src", url);
另外还有个下载zip压缩包的功能也是类似
exportProImg: function(data, resolve, reject) { //只对type进行签名,然后进行拼接 var param = _bale.pack("exportImg", data); var parameters = "?"; for (var key in param) { parameters += key + "=" + param[key] + "&"; } parameters = parameters.substr(0, parameters.length - 1); var url = _mm.getServerUrl("upload", ""); return url + "/upload/exportImg" + parameters; }
//二进制文件打开方式 var url = _product.exportProImg({ goodsImgs: goodsImgs, goodsCode: this.data.goodsDetails.goodsCode });
//直接在浏览器打开 window.location.href = url;