jQuery AJAX发送POST数据正常但PHP无法接收参数问题咨询
问题核心原因
- 你触发AJAX请求时确实以POST方式给
detalle_evento.php传了id_evento参数,但是你在success回调里第一行就执行了location.href='detalle_evento.php',这是跳转行为,属于GET请求,不会携带之前AJAX提交的POST参数,所以跳转后的页面自然拿不到值输出为空。 - 弹窗一闪而逝也是因为跳转操作直接刷新了页面,当前页面的JS上下文被销毁,刚弹出的alert就被强制关闭了。
- 你可以在开发者工具的网络面板里找到对应AJAX请求的返回记录,实际上这次请求已经拿到了带
id_evento输出的结果,只是你跳转走了没有用到这个返回的response。
解决方案
根据你的需求可以选择两种修改方向:
方案1:不需要异步提交,直接跳转传参
如果你的需求就是点击按钮后跳转到详情页展示数据,完全不需要用AJAX,直接把参数放在URL里用GET方式传即可,修改JS代码:
$(document).ready(function() { $('#tabla_eventos').on('click', '#guardar_bt', function(e) { e.preventDefault(); var filaactual = $(this).closest("tr"); var id_evento = filaactual.find("td:eq(0)").html(); // 直接跳转携带GET参数 location.href = 'detalle_evento.php?id_evento=' + id_evento; }); });
对应PHP修改接收逻辑,加参数存在性判断避免报错:
<h1> <?php echo isset($_GET['id_evento']) ? $_GET['id_evento'] : '参数缺失'; ?> </h1>
方案2:保留AJAX异步逻辑,不跳转页面
如果你需要无刷新提交数据,把返回结果展示在当前页,就去掉跳转逻辑,直接用AJAX返回的response渲染当前页面:
$(document).ready(function() { $('#tabla_eventos').on('click', '#guardar_bt', function(e) { e.preventDefault(); var filaactual = $(this).closest("tr"); var id_evento = filaactual.find("td:eq(0)").html(); var parametros = { id_evento : id_evento }; $.ajax({ method: 'POST', data: parametros, url: 'detalle_evento.php', success: function (response) { // 把返回的内容插入到当前页的指定容器即可,比如提前在页面加一个id为result的div用来承载结果 $('#result').html(response); alert('bien'+' '+id_evento); } }); }); });
选择这个方案的话,建议把PHP文件里的完整HTML结构去掉,只返回需要的纯数据内容,避免重复插入完整HTML结构到当前页造成格式混乱。
内容的提问来源于stack exchange,提问作者Diego K.
相关产品推荐
相关产品推荐

