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

使用jQuery $.post向PHP发送数据时返回data未定义/为空的问题求助

解决jQuery $.post返回data为空/未定义的问题

看起来你遇到的核心问题是前后端参数传递不匹配,加上后端获取参数的方式错误,导致返回的内容不符合预期。我帮你一步步排查并解决:

1. 后端参数获取方式错误

你的前端$.post请求把参数(tabla、nombre_campo、id)放在了URL的查询字符串里(也就是GET参数),但后端却用$_POST来获取这些值,这肯定拿不到数据,自然输出的内容为空或者不符合预期。

修正后端deleteRegistro分支的参数获取代码:

case 'deleteRegistro':
    // 改用$_GET获取URL中的参数,或者用$_REQUEST兼容GET/POST
    $tableName = $_GET['tabla'];
    $id = $_GET['id'];
    $idName = $_GET['nombre_campo'];
    
    // 取消注释,确保输出deleteRegistro函数的返回值(应该是1)
    echo deleteRegistro($tableName, $id, $idName);
    break;

2. 优化前端POST请求的参数传递(可选但更规范)

虽然用URL传参能工作,但POST请求更适合把数据放在请求体里。你可以修改Delete函数的$.post部分,把参数作为POST数据发送:

function Delete(id, tableName, idName) {
 if (confirm("¿Estás seguro que deseas borrar el registro con ID " + id + "?") == true) {
    console.log("First parameter: " + id + "\nSecond parameter: " + tableName + "\nThird parameter: " + idName);
    
    // 把参数作为POST数据发送,而不是拼在URL里
    $.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/", {
        action: "deleteRegistro",
        tabla: tableName,
        nombre_campo: idName,
        id: id
    }, function(data) {
        console.log("My data: " + data);
        if(data == 1) {
            console.log("Data OK");
            // 这里可以添加删除成功后的操作,比如刷新表格
            $('#tablaUsuarios').DataTable().ajax.reload();
        } else if (data == '') {
            console.log("Data empty");
        } else if (data == null) {
            console.log("Data null");
        } else if (data) {
            console.log("Data exist");
        } else {
            console.log("Other reasons");
        }
    });
 }
}

对应的后端就可以继续用$_POST获取参数了:

case 'deleteRegistro':
    $tableName = $_POST['tabla'];
    $id = $_POST['id'];
    $idName = $_POST['nombre_campo'];
    echo deleteRegistro($tableName, $id, $idName);
    break;

3. 确保后端输出无干扰

检查deleteRegistro函数是否正确返回1,同时确保PHP没有输出任何额外内容(比如警告、错误提示、空白字符)。这些额外内容会导致前端拿到的data不是纯1,而是包含其他字符的字符串,甚至为空。

可以在PHP文件开头添加:

// 关闭错误输出,避免干扰返回结果
error_reporting(0);
ini_set('display_errors', 0);

同时确认deleteRegistro函数执行成功,返回预期的1。

4. 验证按钮参数的正确性

虽然你说能正确获取函数参数,但还是要确认生成的HTML中onclick事件的参数是否正确。比如$tableName和$idName被json_encode后,生成的应该是带引号的字符串:

<button id='deleteID_123' onclick='Delete(123, "mi_tabla", "id_usuario")' ...>

如果没有引号,会导致JavaScript语法错误,函数无法正常执行。你的PHP代码里已经用了json_encode,这部分应该没问题,但可以检查页面源码确认。

内容的提问来源于stack exchange,提问作者Caín

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:52:44