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

如何将jQuery $.post的done回调结果返回至外部调用?

关于jQuery Ajax异步请求返回值的问题解析

问题场景

开发REST API时,后端PHP已完成,前端通过jQuery/Ajax实现交互,希望apiCall函数返回$.post请求done回调中的响应数据,但调用apiCall()时,打印结果是jqXHR对象而非期望的response。

原apiCall函数代码

function apiCall($methode = '', $value = ''){
  return $.post(endpoint, {'apiKey': apiKey, contentType: 'application/json; charset=utf-8',async: false,dataType: "json"}).done(function (response){console.log('inner response: ' + response['status']);return response});
}

控制台输出

  1. jqXHR对象:
{
    "readyState": 4,
    "responseText": "{\"status\":\"ok\"}",
    "responseJSON": {
        "status": "ok"
    },
    "status": 200,
    "statusText": "OK"
}
  1. done回调内的日志:
inner response: ok

原调用代码

$(document).ready(function(){
  $("#my-submit").click(function (){
      console.log((apiCall()))
  });
});

用户尝试全局变量等方法均无效,后改用then方法实现需求:

$(document).ready(function(){
  $("#domain-report-submit").click(function (){
      apiCall().then((data) => console.log(data['status']));
  });
});

原方法失效的原因

  • $.post本身返回的是jqXHR对象,该对象实现了Promise接口,用于跟踪异步请求的状态。
  • .done()方法的作用是给jqXHR对象添加请求成功后的回调函数,它的返回值仍然是原jqXHR对象,而非回调函数中return response的值——这是jQuery设计的规则,.done()仅负责注册回调,不会改变原函数的返回类型。
  • 即便设置了async: false(同步请求),.done()的返回逻辑也不会改变,同步请求只是阻塞浏览器等待请求完成,但.done()依然是注册回调的角色,无法让apiCall直接返回响应数据。

正确实现方式确认

你使用.then()的写法是完全正确的,原因如下:

  • .then()是Promise标准方法,它会返回一个新的Promise对象,该Promise的resolve值就是回调函数中返回的data(即请求的响应数据)。
  • 这种方式符合异步编程的规范,避免了同步请求阻塞浏览器的问题(不推荐使用async: false)。

优化后的apiCall函数(可选)

可以调整函数写法,更清晰地传递参数并简化配置:

function apiCall(method = '', value = ''){
  // 把请求参数正确传递到后端,同时简化dataType配置
  return $.post(endpoint, {
    apiKey: apiKey,
    method: method,
    value: value
  }, 'json')
  .done(function(response){
    console.log('inner response: ' + response['status']);
  });
}

调用示例

$(document).ready(function(){
  $("#domain-report-submit").click(function (){
    apiCall('your-method', 'your-value').then((data) => {
      console.log(data['status']);
      // 这里可以编写拿到响应后的业务逻辑
    });
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:20:36