uni-app IOS13+ 使用WKWebView 打包的IPA,mui.ajax+formdata接口请求体为空,但其他端正常

uni-app IOS13+ 使用WKWebView 打包的IPA,mui.ajax+formdata接口请求体为空,但其他端正常

产品分类:其他/MUI

App下载地址或H5网址:

示例代码:

let formdata = new FormData();  
formdata.append("versionNo",_this.$path.VERSIONNO);  
formdata.append ("loginName",_this.userInfo.loginName);  
formdata.append ("reName",e.value);  
formdata.append ("fileId",'0');  
formdata.append('photo',files[i]);  

mui.ajax(_this.$path.LEAVEFLOWPHOTO,{
    data:formdata,  
    type:'POST',  
    timeout:30000,      
    processData : false, // 不处理发送的数据,因为data值是Formdata对象,不需要对数据做处理  
    contentType : false, // 不设置Content-type请求头  
    success:function(res){  
      _this.$util.closeWaiting();  
      if(res.code==0){  
        let data = res.data;  

      }else{  
        mui.toast("上传失败");  
      }  
      currentTarget.value = '';  
    },  
    error:function(xhr,type,errorThrown){  

    },  
    complete:function(xhr,type,errorThrown){  
     mui.toast(`状态:${xhr.status},${xhr.responseText}`);  
    }  
});

操作步骤:

app —— 工作台 —— 审批申请 —— 任一流程(如请假&销假流程)—— 随便一个附件上传功能(如客户审批凭证)

预期结果:

该上传功能请求接口 “/app/leaveflow/photo” 的请求体该有文件流及普通字符参数等信息

实际结果:

故障现象:该请求接口请求体为空

bug描述:

如标题,同一份代码打包成其他端(安卓或者h5)却可以正常使用。 尝试换成 plus.uploader.createUpload 做上传文件操作,又发现你们这个只能上传图片,目前来看在IOS13+系统中没有任何方式可以完成上传文件的需求。 同一个上传接口正常请求体跟出现bug的请求体截图如下:

正常接口请求体截图

上传成功 上传成功 上传成功


更多关于uni-app IOS13+ 使用WKWebView 打包的IPA,mui.ajax+formdata接口请求体为空,但其他端正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app IOS13+ 使用WKWebView 打包的IPA,mui.ajax+formdata接口请求体为空,但其他端正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的iOS 13+ WKWebView兼容性问题。在iOS 13及以上版本中,WKWebView对FormData的处理机制发生了变化,导致通过mui.ajax发送的FormData请求体为空。

解决方案:

  1. 使用uni.uploadFile替代
uni.uploadFile({
    url: _this.$path.LEAVEFLOWPHOTO,
    filePath: files[i],
    name: 'photo',
    formData: {
        "versionNo": _this.$path.VERSIONNO,
        "loginName": _this.userInfo.loginName,
        "reName": e.value,
        "fileId": '0'
    },
    success: (res) => {
        const data = JSON.parse(res.data);
        if(data.code == 0){
            // 处理成功逻辑
        } else {
            uni.showToast({title: "上传失败"});
        }
    }
});
回到顶部