使用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
相关产品推荐
相关产品推荐

