AJAX向PHP发送POST参数时isset($_POST[])判断不生效如何解决
问题核心原因
- JS取select控件值错误,你获取到的是DOM节点对象而非选中值,传给后端的参数无法被PHP正确识别
- 异步AJAX请求和页面同步渲染的时序逻辑混乱:页面首次加载时PHP就已经执行完毕生成了页面内容,后续触发的AJAX请求不会刷新当前页面,也就不会更新页面里已经输出的
$P变量值,你之前的测试逻辑本身无法验证AJAX参数是否传递成功 - AJAX的
data参数写法冗余,额外的括号可能导致部分环境下参数解析异常
修复方案
1. 修正前端JS请求逻辑
优先用select2自带的val()方法获取选中值,同时将后端返回的结果直接存在前端变量中,不要依赖PHP渲染输出:
$(function(){ $('#Refva').select2(); let P = ''; // 前端存储返回结果的变量 // 直接绑定select2的change事件,无需额外写全局函数 $('#Refva').on('change', function() { // 正确获取选中值 const txt = $(this).val(); $.ajax({ url: "Vente.php", type: "POST", data: {'txt': txt}, dataType: 'json', success: function(res) { if (res.code === 200) { P = res.p; console.log('参数接收成功', res); } }, error: function() { console.log("Une erreur s'est produite"); } }); }); // 点击填充逻辑 $('#Article_vendua').on('click', function() { $(this).val(P); }); })
2. 修正PHP后端逻辑
把AJAX请求的处理逻辑和页面渲染逻辑分离,AJAX请求处理完直接返回结果不要输出页面内容:
// 优先处理AJAX POST请求 if (isset($_POST['txt'])) { // 后续可以在此处添加数据库查询逻辑 $response = [ 'code' => 200, 'p' => 'It work!' ]; echo json_encode($response); exit; // 终止执行,避免返回多余的页面内容 } // 下方写首次加载页面的其他业务逻辑
修改完成后select值变更触发AJAX请求,后端收到参数就会返回成功标识,前端拿到结果后存储到变量,点击输入框即可正常填充内容。
内容的提问来源于stack exchange,提问作者Abdelmoumen Abderezak
相关产品推荐
相关产品推荐

