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

如何解决jQuery Ajax函数返回值无法存入变量的问题?

解决generate_code()返回undefined的问题

我明白你遇到的困扰了——调用generate_code()后,Random变量总是undefined,这都是因为函数里的AJAX请求是异步操作,直接同步调用根本拿不到最终的有效条码值。

问题根源拆解

  • 你的generate_code()函数当前返回的是$.ajax()的返回对象(一个jqXHR实例),而不是你真正想要的有效条码。
  • AJAX请求会在后台执行,success回调要等服务器响应后才会触发,这时候函数早就已经执行完返回了,回调里的return code完全没办法传递给外部的Random变量。

修改方案:用Promise处理异步逻辑

咱们把异步请求包装成Promise,这样就能优雅地获取到最终的有效条码了。

1. 重构check_barcode函数,返回Promise

function check_barcode(code) {
  var data = { Code: code };
  var formsubmission = 'https://www.vsss.co.in/Admin/index.php/Ajax/check_barcode';
  
  return new Promise((resolve, reject) => {
    $.ajax({
      method: "POST",
      url: formsubmission,
      data: data,
      success: function(response) {
        var data = JSON.parse(response);
        // 如果条码已存在或已失效,重新生成并递归检查
        if (data['Existing'] >= 1 || data['Disconnected'] >= 1) {
          resolve(generate_code());
        } else {
          // 条码有效,返回这个值
          resolve(code);
        }
      },
      error: function(xhr) {
        // 处理请求失败的情况,可根据需求调整
        reject('条码检查请求失败:', xhr);
      }
    });
  });
}

2. 调整generate_code函数,返回Promise结果

function generate_code() {
  // 生成12位随机数
  var randomCode = Math.floor(Math.random() * (999999999999 - 100000000000 + 1)) + 100000000000;
  // 把检查条码的Promise返回出去
  return check_barcode(randomCode);
}

3. 获取有效条码的两种方式

你可以选择以下任意一种方式拿到最终的有效条码:

方式一:用async/await(更直观的同步风格)
// 必须在async函数内使用await
async function getValidBarcode() {
  try {
    var Random = await generate_code();
    console.log('有效条码:', Random);
    // 这里可以把Random用于后续逻辑
  } catch (error) {
    console.error('出错了:', error);
  }
}

// 调用函数触发流程
getValidBarcode();
方式二:用.then()链式调用
generate_code()
  .then(function(validCode) {
    var Random = validCode;
    console.log('有效条码:', Random);
    // 后续逻辑写在这里
  })
  .catch(function(error) {
    console.error('出错了:', error);
  });

为什么这样改能解决问题

  • Promise是处理异步操作的标准方案,它能帮我们把“回调地狱”转换成清晰的链式或同步风格代码。
  • 当生成的条码无效时,我们递归调用generate_code()并把它的结果resolve出去,这样就能自动循环生成,直到拿到符合要求的有效条码。
  • 用await或.then()可以确保我们在异步请求完成后,再拿到最终的有效条码值,而不是提前拿到undefined。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:24:31