如何向PHP发起AJAX POST请求并正确提取返回的responseText
问题原因
你当前写法的核心问题是 AJAX 请求默认是异步执行的:$.ajax 调用后不会等待请求返回就会直接返回 jQuery 内置的 jqXHR 异步对象,此时请求还在后台处理,自然无法直接读取到 responseText 属性。
可行解决方法
方法1:使用回调函数处理返回结果
在findQuestions里传入回调参数,请求成功后主动调用回调把结果传出去:
function findQuestions(sala, id, callback) { $.ajax({ method: "POST", url: "./votos/findQuestions.php", data: { file: sala, id: id }, dataType: "html", success: function(output) { // 调用回调把结果传递出去 if(typeof callback === 'function') callback(output); } }); }
调用写法:
findQuestions("<?php echo $nombreSala?>", item.getAttribute('iddb'), function(res) { // 这里拿到返回结果直接用 console.log(res); // 后续业务逻辑写在这里 })
方法2:使用 async/await 语法(更简洁的现代写法)
jQuery 3.0+ 版本的 jqXHR 对象已经原生支持 Promise 规范,可以直接用 async/await 同步写法拿结果:
async function findQuestions(sala, id) { // await 等待异步请求完成返回结果 return await $.ajax({ method: "POST", url: "./votos/findQuestions.php", data: { file: sala, id: id }, dataType: "html" }); }
调用写法(必须在async函数内使用await):
// 外层函数必须加 async 修饰 async function yourBusinessFunction() { const res = await findQuestions("<?php echo $nombreSala?>", item.getAttribute('iddb')); console.log(res); // 后续业务逻辑写在这里 } // 调用执行业务函数 yourBusinessFunction();
注意事项
- 绝对不推荐通过设置
async: false把请求改成同步模式,会阻塞整个页面线程,导致页面无响应,用户体验极差。 - 如果后端返回的是结构化数据(比如数组、对象),建议把
dataType改为json,jQuery会自动帮你解析为JS对象,不需要手动处理字符串。
内容的提问来源于stack exchange,提问作者ICIM
相关产品推荐
相关产品推荐

