A痞子  2023-02-24 21:19 采纳率: 73.8%
浏览 112
已结题

如何解决uni.request传值乱码的问题

如何解决uni.request传值乱码的问题

下面是我封装的代码

const BASE_URL = `http://localhost/app/`
export const myRequest = (options) => { //暴露一个function:myRequest,使用options接收页面传过来的参数
return new Promise((resolve)=>{//定义resolve用于外部接收
                uni.request({
                    url: BASE_URL + options.url,
                    data: options.data || {}, //接收请求的data,不传默认为空
                    method: options.method || 'GET', //接收请求的方式,如果不传默认为GET
                    header: {
                        'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
                    },
                    success: (res) => {
                        //console.log(res)        // 将请求结果resolve出去
                        resolve(res)        // 将请求结果resolve出去
                    }
                })
})

        }


下面是我调用的代码

this.myRequest({
                    url: '1.asp',
                    method:"POST",
                    data: {
                        id1: 4,
                        id2: 'addoil',
                        id3: this.eid,
                        s_l11_10: this.s_l11_10, //借用人姓名
                    },

                }).then(res => {

                    console.log(res)
                    if (res.data==true) {
                    uni.showToast({
                        title: "数据提交成功!",
                        duration: 2000, // 这个弹窗显示多少毫秒
                        
                    }),

这个s_l11_10里有中文的话发送过去,接收是乱码.
下面是输入和接受的截图,是我哪里编码不对吗?我也把charset=UTF-8改成charset=GB2312也还是乱码。

img

img

  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-02-24 23:14
    关注

    该回答引用ChatGPT
    你的代码看起来没有对中文进行编码,导致传输时出现了乱码。可以尝试使用encodeURIComponent()对中文进行编码,修改一下你的代码如下:

    
    const BASE_URL = `http://localhost/app/`
    export const myRequest = (options) => {
        return new Promise((resolve)=>{
            uni.request({
                url: BASE_URL + options.url,
                data: options.data || {},
                method: options.method || 'GET',
                header: {
                    'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
                },
                success: (res) => {
                    resolve(res)
                }
            })
        })
    }
    
    // 对数据进行编码
    const encodedData = Object.keys(options.data).map(key => {
        return encodeURIComponent(key) + '=' + encodeURIComponent(options.data[key]);
    }).join('&');
    
    // 调用时传入编码后的数据
    this.myRequest({
        url: '1.asp',
        method:"POST",
        data: encodedData
    }).then(res => {
        console.log(res)
        if (res.data==true) {
            uni.showToast({
                title: "数据提交成功!",
                duration: 2000, // 这个弹窗显示多少毫秒
            })
        }
    })
    
    

    这样就可以保证中文数据传输时不会出现乱码了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 已采纳回答 2月25日
  • 创建了问题 2月24日

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: