异步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
相关产品推荐
相关产品推荐

