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

异步Ajax调用返回Promise,如何获取PHP返回的字符串值?

解决Ajax回调中调用Async函数返回Promise而非实际值的问题

我来帮你搞定这个问题~你遇到的核心问题是async函数默认返回Promise对象,而你在普通的Ajax success回调里直接调用它,没有处理Promise的异步结果,所以才会得到[object Promise]。下面一步步给你拆解原因和解决方案:

问题根源

你的getFToken是async函数,不管你内部return什么值,它都会自动包装成一个Promise对象。当你在getFeedback的success回调里直接写var test = getFToken(387);时,test其实是一个未resolved的Promise,不是PHP返回的字符串值。

解决方案

有两种常用的方式来获取Promise的实际结果,选一种适合你的就行:

方法1:把success回调改成async函数,用await获取结果

直接将success的普通函数改成async函数,这样就能在里面用await等待getFToken的异步结果:

修改后的getFeedback代码:

function getFeedback(postId){ 
  $(" .show_company").hide(); 
  $(" .show_feedback").show(); 
  $.ajax({ 
    type: "POST", 
    dataType: "json", // 这里注意:原dataType写了"text json",建议直接写"json"更规范
    url: ajax_object.ajax_url, 
    data:{ 
      action:'get_feedback', 
      postId: postId, 
    }, 
    // 把success回调改成async函数
    async success:function(response) { 
      var postTitle = ''; 
      for (i in response) { 
        // 用await获取getFToken的实际返回值
        var fToken = await getFToken(387); 
        postTitle += "<h1>" + response[i].post_title + "</h1><br/><br/>" + response[i].ID + "<br/>Token: " + fToken; 
      }; 
      $("#result").html(postTitle); 
    } 
  }); 
}

另外,你的getFToken里的success回调是多余的,可以删掉,因为await $.ajax()已经会返回请求的response了,简化后:

async function getFToken(postId){ 
  const response = await $.ajax({ 
    type: "POST", 
    url: ajax_object.ajax_url, 
    data:{ 
      action:'get_f_token', 
      postId: postId, 
    } 
  }); 
  return response; 
}

方法2:用Promise的.then()方法处理结果

如果不想修改success回调为async函数,也可以用Promise的.then()方法来获取getFToken的结果,同时用Promise.all确保所有异步请求完成后再统一渲染:

修改后的success回调部分:

success:function(response) { 
  // 用Promise.all处理循环里的异步请求,确保所有token都获取后再渲染
  Promise.all(response.map(async (item) => {
    const fToken = await getFToken(387);
    return "<h1>" + item.post_title + "</h1><br/><br/>" + item.ID + "<br/>Token: " + fToken;
  })).then(allHtmlParts => {
    $("#result").html(allHtmlParts.join(''));
  });
}

这种方式能避免循环里异步操作导致的渲染顺序混乱问题。

额外注意点

  • 你的PHP代码get_f_token是没问题的,wp_die()确保了请求结束后正确终止,返回的$fToken会被jQuery的ajax正确接收。
  • 原getFeedback里的dataType: "text json"建议改成"json",因为WordPress的ajax接口返回的是JSON格式(如果你的get_feedback返回的是数组的话),这样jQuery会自动解析成对象,避免潜在的解析问题。

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:29:42