解决uni.request()内调用this失效的两种方法
两种解决方法:
- 使用箭头函数(箭头函数内没有
this,所以使用this时其实是父层的this) - 外层定义
let that=this,这样在uni.request()内部使用that来代替this即可
<template>
<view>
<view>{{title}}</view>
</view>
</template>
<script>
export default {
data(){
return {
title : "标题"
}
},
methods: {
post(){
uni.request({
url: "xxx.html",
data: {},
method:"POST",
header : {"content-type":"application/x-www-form-urlencoded;charset=utf-8"},
success : ()=> {
this.title == "正常"; //正常
return;
},
fail () {
this.title == "无效"; //无效
return;
},
complete : function() {
this.title == "无效"; //无效
return;
}
});
}
}
}
</script>
uni.uploadFile()上传失败及uni.request()参数失败
1.uni.uploadFile()
如果设置了头部参数,例如:header:{'Content-Type': "multipart/form-data"},那么在h5模式下将会出错。
如果不设置,在浏览器里的值为:Content-Type:multipart/form-data; boundary=----WebKitFormCoundaryzya7MjtVluBecaQ2,后面多了boundary,这是必要的,给服务器分割使用。
但如果你自己设置这个Content-Type参数,那就相当于强行把boundary这个值给去掉了,自然服务器就报错了。
根据网友提示,app里需要自定义设置,还需研究:uni.uploadFile接口使用问题
// #ifdef H5
return this.uploadHeader;
// #endif
// #ifndef H5
return Object.assign({'Content-Type': "multipart/form-data"},this.uploadHeader);
// #endif
2.uni.request()
根据这个问题引出uni.request()如果要传参数给服务器,则必须设置头参数:
{'Content-Type': "application/x-www-form-urlencoded;charset=utf-8"}
否则uniapp的默认设置为json,可能不符合服务器接收要求。
uni.request()用法,举例header里发送数据由php接收
uniapp:uni-app发起网络请求
uni.request({
url: '',
data: {},
method:"POST",
header: {
'token': 'aabbcc' //请求头信息
},
success:function(res){},
fail:()=>{},
complete:()=>{}
});
//如果header里放入的值为token,到header里会自动加上HTTP_,并且转化为大写,取值时如下
$token = $_SERVER['HTTP_TOKEN'];
如果要自己封装,可以参考:uniapp的请求封装(含post ,get,put ,delete)


本文介绍了在uni-app中遇到的this指向问题,特别是在uni.request()和uni.uploadFile()方法内使用this导致的数据修改失效。提出了使用箭头函数保持this指向的解决方法,并分享了uni.uploadFile()的H5模式下Content-Type设置注意事项,以及uni.request()传递参数的正确方式。同时,讨论了如何封装uni.request()方法并提供了PHP端获取请求头信息的示例。
&spm=1001.2101.3001.5002&articleId=124755504&d=1&t=3&u=35c33796bf464f528b3b8c64bf570b17)
5419

被折叠的 条评论
为什么被折叠?



