You need to enable JavaScript to run this app. 如何向PHP发起AJAX POST请求并正确提取返回的responseText
优惠活动
大模型
产品
解决方案
定价
更多

如何向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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 04:06:09