You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JQuery $.get请求失败进入Catch块,报错$.get不是函数求助

搞定你的jQuery请求问题:从$.get is not a function到异步逻辑修正

先解决你眼前最头疼的TypeError: $.get is not a function问题:

你说已经在HTML里引入了jQuery,但还是报这个错,大概率逃不过这几个原因:

  • 你用的是jQuery Slim版:Slim版本特意砍掉了Ajax相关的方法(包括$.get、$.ajax这些),如果你的引入链接里带了/slim/,比如https://code.jquery.com/jquery-3.7.1.slim.min.js,那肯定用不了$.get。换成完整版本就行,比如https://code.jquery.com/jquery-3.7.1.min.js。
  • $被其他库抢了:如果页面里还加了Prototype、Zepto这类也用$当标识符的库,会把jQuery的$覆盖掉。这时候可以直接用jQuery.get()代替$.get(),或者给jQuery换个名字:
    var jq = jQuery.noConflict();
    jq.get(...) // 用jq代替$调用方法
    
  • jQuery根本没引入成功:别光说引入了,打开浏览器控制台的「网络」面板看看,jQuery的请求是不是返回404?或者直接在控制台输入jQuery或者$,如果返回undefined,那就是真的没加载成功,检查一下引入路径有没有写错。

接下来是你代码里的隐形坑(就算jQuery没问题,原代码也跑不对):

你的getBalance函数有两个致命的异步逻辑问题:

  1. try/catch抓不到异步错误:$.get是异步操作,它的错误不会在当前的try块里抛出来,你之前看到的catch触发其实是因为$.get不存在的同步错误。要处理异步请求的失败,得用$.get自带的错误回调,或者用Promise写法(jQuery的Ajax方法都返回Promise对象)。
  2. 还没拿到数据就return了:$.get是异步的,当你执行return balance的时候,请求还在后台跑呢,balance还是一开始的undefined,根本拿不到服务器返回的结果。

给你改好的代码,用Promise风格更直观(适合新手理解异步逻辑):

function getBalance() {
  // 返回一个Promise对象,调用方通过.then/.catch处理结果
  return new Promise((resolve, reject) => {
    // 用jQuery.get避免$被覆盖的问题
    jQuery.get("https://[censored]-backend-system.glitch.me/balance/", {login: username})
      .done((data) => {
        console.log(data);
        resolve(data); // 请求成功,把余额数据传递出去
      })
      .fail((error) => {
        console.log("请求失败:", error);
        reject(error); // 请求失败,传递错误信息
      });
  });
}

// 调用这个函数的正确姿势:
getBalance()
  .then((balance) => {
    console.log("拿到余额啦:", balance);
    // 这里写拿到余额后的逻辑,比如渲染到页面上
  })
  .catch((error) => {
    console.log("出问题了:", error);
    // 这里处理请求失败的情况,比如提示用户
  });

如果更习惯用回调的写法(贴近你原来的思路),可以改成这样:

function getBalance(callback) { // 传入一个回调函数来接收结果
  try {
    jQuery.get("https://[censored]-backend-system.glitch.me/balance/", {login: username}, (data) => {
      console.log(data);
      callback(null, data); // 成功时把数据传给回调
    }).fail((error) => {
      console.log("请求失败");
      callback(error, null); // 失败时把错误传给回调
    });
  } catch (err) {
    console.log("同步错误:", err);
    callback(err, null);
  }
}

// 调用方式:
getBalance((error, balance) => {
  if (error) {
    console.log("出错了:", error);
    return; // 或者返回0之类的默认值
  }
  console.log("当前余额是:", balance);
  // 后续逻辑都在这里写
});

最后给你这个jQuery新手提个小醒:

  • 写异步代码的时候,千万别想着「直接return异步结果」,异步操作不会等它完成才往下走,一定要用回调、Promise或者async/await来处理后续逻辑。
  • 遇到jQuery方法找不到的问题,先去控制台确认jQuery对象存在不,以及对应的方法是不是真的有(比如输入jQuery.get,返回function就没问题)。

内容的提问来源于stack exchange,提问作者IdiotJS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:06:49