首页 > 编程语言 >【Vue】【uni-app】【小程序】多层嵌套方法导致this指向出错:解析 JSON 失败: TypeError: Cannot read property ‘push‘ of undefined

【Vue】【uni-app】【小程序】多层嵌套方法导致this指向出错:解析 JSON 失败: TypeError: Cannot read property ‘push‘ of undefined

时间:2024-09-24 15:22:19浏览次数:11  
标签:Vue console title read res JSON const property wx

项目场景:

在使用vue+uni-app开发微信小程序的时候,调试报错:解析 JSON 失败: TypeError: Cannot read property ‘push’ of undefined
在这里插入图片描述


问题描述

报错如下:

以下是出问题的代码:

data() {
        return {
            fileLists: [],        
        }
       }
// 上传文件        
        chooseMessageFile() {
            var uid = this.uid
            wx.chooseMessageFile({
                count: 1, // 默认9
                type: 'file',
                // extension: ['.zip', '.docx', '.doc', '.pdf', 'txt', '.csv', '.xlsx', '.ppt', '.pptx'],
                success: function (res) {
                    console.log(res)
                    const tempFilePaths = res.tempFiles[0].path;
                    const tempFileName = res.tempFiles[0].name;

                    wx.uploadFile({
                        url: BASE_API_URL + '/Upload/upload', //接口地址
                        filePath: tempFilePaths,
                        name: 'file',
                        formData: {
                            'uid': uid
                        },
                        success: (res) => {
                            try {
                                const jsonData = JSON.parse(res.data);
                                console.log('解析后的JSON数据:', jsonData);
                                // 处理 JSON 数据
                                if (jsonData.code == 0) {
                                    const link = jsonData.data;
                                    console.log('解析后的link:', link);

                                    const linkData = { annex_id: "", title: tempFileName, link: jsonData.data };
                                    console.log('解析后的linkData:', linkData);
                                    console.log('这是fileLists:', that.fileLists);
                                    this.fileLists.push(linkData);
                                    wx.showToast({
                                        title: '上传成功',
                                        icon: 'success'
                                    });
                                } else {
                                    wx.showToast({
                                        title: '上传失败',
                                        icon: 'none'
                                    });
                                }
                            } catch (e) {
                                console.error('解析 JSON 失败:', e);
                                console.error('原始数据:', res.data);
                                wx.showToast({
                                    title: '解析 JSON 失败',
                                    icon: 'none'
                                });
                            }

                        },
                        fail: (err) => {
                            console.error('上传失败:', err);
                            wx.showToast({
                                title: '上传失败',
                                icon: 'none'
                            });
                        }
                    })
                }
            })
        },

原因分析:

提示:这里填写问题的分析:

在代码中多次打印,排查问题,最终问题锁定在了下面这行代码中:

this.fileLists.push(linkData);

请教了一下以前的学长,得知问题可能出现在多层方法嵌套上,导致this的指向错误


解决方案:

在最外层的方法开始的时候增加如下代码:

var that = this

并且将嵌套的方法中的this改成that

// 上传文件        
        chooseMessageFile() {
            var uid = this.uid
            wx.chooseMessageFile({
                count: 1, // 默认9
                type: 'file',
                // extension: ['.zip', '.docx', '.doc', '.pdf', 'txt', '.csv', '.xlsx', '.ppt', '.pptx'],
                success: function (res) {
                    console.log(res)
                    const tempFilePaths = res.tempFiles[0].path;
                    const tempFileName = res.tempFiles[0].name;
                    wx.uploadFile({
                        url: BASE_API_URL + '/Upload/upload', //接口地址
                        filePath: tempFilePaths,
                        name: 'file',
                        formData: {
                            'uid': uid
                        },
                        success: (res) => {
                            try {
                                const jsonData = JSON.parse(res.data);
                                //console.log('解析后的JSON数据:', jsonData);
                                // 处理 JSON 数据
                                if (jsonData.code == 0) {
                                    const link = jsonData.data;
                                    //console.log('解析后的link:', link);
                                    const linkData = { annex_id: "", title: tempFileName, link: jsonData.data };
                                    //console.log('解析后的linkData:', linkData);
                                    //console.log('这是fileLists:', that.fileLists);
                                    that.fileLists.push(linkData);
                                    wx.showToast({
                                        title: '上传成功',
                                        icon: 'success'
                                    });
                                } else {
                                    wx.showToast({
                                        title: '上传失败',
                                        icon: 'none'
                                    });
                                }
                            } catch (e) {
                                console.error('解析 JSON 失败:', e);
                                console.error('原始数据:', res.data);
                                wx.showToast({
                                    title: '解析 JSON 失败',
                                    icon: 'none'
                                });
                            }
                        },
                        fail: (err) => {
                            console.error('上传失败:', err);
                            wx.showToast({
                                title: '上传失败',
                                icon: 'none'
                            });
                        }
                    })
                }
            })
        },

问题解决

在这里插入图片描述

标签:Vue,console,title,read,res,JSON,const,property,wx
From: https://blog.csdn.net/SSRHR/article/details/142490264

相关文章

  • 基于django+vue摄影交流系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着数字技术的飞速发展,摄影艺术已成为大众生活中不可或缺的一部分,它不仅记录着生活的点滴,更是个人情感与创意表达的重要方式。然而,在摄影......
  • 基于django+vue社会公益服务平台的设计与实现【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会的快速发展和人们公益意识的日益增强,社会公益活动已成为连接社会各界、促进资源合理配置与共享的重要桥梁。然而,传统公益模式在信......
  • 基于django+vue商品分析与管理系统的设计和实现【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着电子商务的迅猛发展,商品种类与数量呈爆炸式增长,企业面临着前所未有的商品管理挑战。传统的手工或简单信息化管理方式已难以满足当前复......
  • 基于django+vue热点新闻搜索系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,信息爆炸式增长已成为现代社会的重要特征。每日海量的新闻资讯充斥着各类媒体平台,用户如何快速、准确地从浩如烟......
  • 《深入解析 Java 中的 ThreadLocal》
    ThreadLocal1.概述ThreadLocal被称为线程局部变量,用于在线程中保存数据。由于在ThreadLocal中保存的数据仅属于当前线程,所以该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal用于在同一个线程间,在不同的类和方法之间共享数据的的场景,也可以......
  • Vue.js与Flask/Django后端配合
    Vue.js是一个流行的前端JavaScript框架,而Flask和Django是常用的Python后端框架。以下是关于Vue.js与Flask或Django后端配合的介绍:一、Vue.js的特点与优势Vue.js具有以下主要特点和优势:渐进式框架:可以根据项目需求逐步引入和扩展功能。响应式数据绑定:自动更......
  • Arthas thread(查看当前JVM的线程堆栈信息)
    文章目录二、命令列表2.1jvm相关命令2.1.2thread(查看当前JVM的线程堆栈信息)举例1:展示[数字]线程的运行堆栈,命令:thread线程ID举例2:找出当前阻塞其他线程的线程二、命令列表2.1jvm相关命令2.1.2thread(查看当前JVM的线程堆栈信息)使用场景:在Arthas中,thread命令用于查看和分......
  • 基于nodejs+vue校园二手市场平台[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着高等教育的普及和校园生活的丰富多彩,学生们在日常学习与生活中积累了大量不再需要的二手物品,如书籍、学习资料、电子产品、生活用品等。同时,新入学的学......
  • 基于nodejs+vue校园二手商品交易平台[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着高等教育的普及和校园生活的丰富多彩,大学生群体对各类商品的需求日益增长,同时也伴随着大量物品的闲置与浪费。特别是在每学期末或毕业生离校之际,大量书......
  • 基于nodejs+vue校园二手商城[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景在数字化高速发展的今天,校园生活日益丰富多彩,学生间的物品流转需求也日益增长。传统的二手交易方式,如校园公告板、微信群等,虽在一定程度上满足了部分需求,但......