如何将Ajax发起的HTTP GET请求响应结果保存到变量中
如何将Ajax请求的返回值存入变量
你写的后端接口和前端Ajax请求基础逻辑没有问题,要存储接口返回的响应值,核心要注意$.ajax默认是异步执行的,不能用同步编码的思路直接拿返回值,具体实现方式如下:
方法1:在success回调中赋值(最基础写法)
先在请求作用域外声明存储变量,在请求成功的回调函数内把返回值赋值给变量即可。注意:所有依赖这个返回值的业务逻辑,必须写在success回调内部,否则会因为请求还未完成,读取到undefined。
// 声明存储响应值的变量 let result; function test() { $.ajax({ type: "GET", url: "/api/test", success: function(response) { // 将返回值存入变量 result = response; console.log(result); // 此处可正常打印出 "hello" // 所有需要用到result的逻辑都要写在这个回调里 } }) } test(); // ❌ 不要在这个位置直接读取result,此时请求还没返回,result值为undefined
方法2:async/await写法(推荐,避免回调嵌套)
把Ajax请求包装为Promise对象,用async/await语法以接近同步的写法处理异步逻辑,不会有时序问题,代码可读性更高:
// 先把接口请求包装成返回Promise的函数 function getTestResult() { return new Promise((resolve, reject) => { $.ajax({ type: "GET", url: "/api/test", success: (response) => resolve(response), error: (err) => reject(err) }) }) } async function test() { // 等待请求完成后再赋值,不会出现拿不到值的问题 const result = await getTestResult(); console.log(result); // 正常拿到 "hello" // 后续依赖result的逻辑直接在await之后写即可,不需要嵌套在回调里 } test();
❌ 避坑提醒:不要为了方便给$.ajax添加
async: false参数把请求改成同步模式,这种写法会阻塞浏览器主线程,请求发送期间页面会完全卡死,属于已经被废弃的不推荐用法。
内容的提问来源于stack exchange,提问作者Juzzn
相关产品推荐
相关产品推荐

