帖子
帖子
用户
博客
课程
显示全部楼层
2
帖子
0
勋章
5
Y币

[FAQ] ajax url编码问题

[复制链接]
发表于 2018-8-9 14:02:37
在做头像上传的时候,需要把头像上传到腾讯云COS,其中URL有个参数sign需要转码:如sign为G/kbUdynZNxT+LiK3Z6时,
上传URL为:?sign=G%2FkbUdynZNxT%2BLiK3Z6

所以在生成sign后使用encodeURIComponent对其编码:
var sign   = 'G/kbUdynZNxT+LiK3Z6';
sign   = encodeURIComponent(sign);

var url='http://tj.file**.**/files/v2/1122334455/webs/user_header/123456_headimg.png?sign='+sign;

api.ajax({
       url: url,
       method: 'post',
       data: {
           values: {
              op: 'upload',
              insertOnly:0
           },
           files: {
               fileContent:file
           }
       }
   },function(ret, err){
       if (ret && ret.code==0) {
            mapp.alert('上传成功');
       } else {
           mapp.alert('错误:'+JSON.stringify(err));
       }
   });


在ios(iphone X)上测试成功,同样的代码在android上测试上传失败,提示sign错误,拦截URL发现,android上ajax会自动对URL编码,IOS上不会,也就是我的sign在android上进行了两次encodeURIComponent编码工作,
android上URL的sign为:encodeURIComponent(encodeURIComponent(sign)); //非正常值
ios上URL的sgin为:encodeURIComponent(sign);                                                  //正常值
若直接使用未编码的sign,IOS上未编码,提示sign错误
这是ajax的BUG吗?

解决方法:if(api.systemType=='ios') sign   = encodeURIComponent(sign);
当为ios时才进行编码!!
28
帖子
1
勋章
1万+
Y币
看下ajax的encode参数。默认或传true时,Android将始终对url编码,而iOS只有在url不合法(如存在中文字符)的时候才进行编码。如果url中有特殊字符需要编码的,建议先在js层进行编码,然后此参数传false。
2
帖子
0
勋章
5
Y币
技术咨询-Kenny 发表于 2018-8-9 15:57
看下ajax的encode参数。默认或传true时,Android将始终对url编码,而iOS只有在url不合法(如存在中文字符) ...

好的,看到了,谢谢技术的回复
您需要登录后才可以回帖 登录

本版积分规则