异常:thirdScriptError totalCost is not defined;at api request success callback function ReferenceError

本文解析了在微信小程序中,从Java后台获取totalCost和calories值时遇到的totalCostisnotdefined错误。通过调整作用域,将this赋值给myThis变量,在回调函数中使用myThis.setData解决问题。

异常提示

VM789:1 thirdScriptError
totalCost is not defined;at api request success callback function
ReferenceError: totalCost is not defined
    at success (http://127.0.0.1:12446/appservice/pages/home/home.js:92:25)
    at Function.o.(anonymous function) (http://127.0.0.1:12446/appservice/__dev__/WAService.js:1:1296511)
    at http://127.0.0.1:12446/appservice/__dev__/WAService.js:1:125690
    at k (http://127.0.0.1:12446/appservice/__dev__/WAService.js:1:526119)
    at i.<anonymous> (http://127.0.0.1:12446/appservice/__dev__/WAService.js:1:832038)
    at i.emit (http://127.0.0.1:12446/appservice/__dev__/WAService.js:1:574350)
    at Xi (http://127.0.0.1:12446/appservice/__dev__/WAService.js:1:832676)
    at http://127.0.0.1:12446/appservice/__dev__/WAService.js:1:833896
    at http://127.0.0.1:12446/appservice/__dev__/WAService.js:1:597101
    at n (http://127.0.0.1:12446/appservice/__dev__/asdebug.js:1:3175)

出现场景及部分相关代码

getUserInfo: function (e) {
    **********
    **********
    success:function(res){
        if(res.data.message == "success"){
          console.log("调用homeAction/getTotalCostAndCalories成功,且获取数据成功");
          this.setData({
            totalCost : res.data.totalCost,
            calories : res.data.calories
          })
          
        }
        if(res.data.message == "fail"){
          console.log("调用homeAction/getTotalCostAndCalories成功,获取数据失败");
        }
      }
    **********
    **********

从后台(Java)向前台(微信小程序home.js)返回两个值(totalCost,calories )。
在将这两个值分别赋值给页面参数(totalCost,calories )的时候,出现如上错误。

分析原因

根据提示,应该是与回调函数callback 有关。
网上的说法:作用域问题——回调函数中的作用域已经脱离了调用函数了,因此需要在回调函数外边把this赋给一个新的变量才可以了。

参考:
  1. 微信小程序Cannot read property ‘setData’ of null;
  2. 逍遥云天微信小程序开发——使用回调函数出现异常:TypeError: Cannot read property ‘setData’ of undefined

解决方法

```javascript
getUserInfo: function (e) {
	**var myThis = this;**
    **********
    **********
    success:function(res){
        if(res.data.message == "success"){
          console.log("调用homeAction/getTotalCostAndCalories成功,且获取数据成功");
          **myThis**.setData({
            totalCost : res.data.totalCost,
            calories : res.data.calories
          })
          
        }
        if(res.data.message == "fail"){
          console.log("调用homeAction/getTotalCostAndCalories成功,获取数据失败");
        }
      }
    **********
    **********

以上。

### Vue SSR 中 `TUICalling is not defined` 错误分析 当遇到 `ReferenceError: TUICalling is not defined` 错误时,这表明在尝试访问名为 `TUICalling` 的对象或函数之前并未对其进行声明或引入。此类错误通常发生在服务端渲染 (SSR) 环境下,因为某些全局对象仅存在于浏览器环境中,在服务器上运行时不被识别。 #### 常见原因及解决方案 1. **客户端特有 API 使用不当** 如果 `TUICalling` 是一个依赖于浏览器环境的功能模块,则不应直接在服务端代码中调用。可以考虑通过条件判断来区分当前执行环境: ```javascript import { isClient } from 'some-util'; // 或者自定义检测逻辑 let TUICalling; if (isClient()) { TUICalling = require('tui-calling'); // 动态加载只适用于客户端的部分 } ``` 2. **第三方库兼容性问题** 部分第三方库可能不完全支持 SSR 场景下的初始化方式。对于这种情况,建议查阅官方文档确认是否有针对 SSR 的特殊配置指南;也可以尝试寻找社区内已有的解决方案或替代方案[^1]。 3. **按需懒加载组件** 对于那些确实无法绕过的服务端限制的情况,可以通过路由级别的懒加载机制延迟加载含有潜在风险的组件直到实际需要它们的时候再实例化: ```javascript const DetailView = () => import(/* webpackChunkName: "detail-view" */ './components/Detail.vue'); ``` 4. **确保正确安装并导入必要的包** 双重检查项目中的 package.json 文件以及 node_modules 目录,验证是否已经成功安装了所需的 npm/yarn 包,并且按照说明进行了正确的路径引用[^2]。 5. **更新至最新稳定版框架及相关插件** 维护团队可能会修复旧版本中存在的 bug 和兼容性问题,因此保持所使用的技术栈处于最新的稳定状态有助于减少不必要的麻烦[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值