使用Ajax提交表单至PHP无响应,请求问题排查
排查Ajax提交表单无响应问题
前端代码问题及修复
问题点
- 事件参数缺失:点击事件函数未接收
e参数,直接调用e.preventDefault()会触发未定义错误,中断后续Ajax执行。 - 重复
success回调:Ajax配置中写了两个success函数,后者会覆盖前者,导致第一个alert(data)永远无法执行。 - 错误回调变量未定义:
error回调里使用jqXHR但未将其作为参数传入,无法打印有效错误信息。
修改后的前端JS代码
$(document).ready(function() { $("#submit_button").click(function(e) { // 传入事件参数e e.preventDefault(); var doctor_id = $("#doctor_id").val(); var schedule_date = $("#schedule_date").val(); var schedule_timeslot = $("#schedule_timeslot").val(); var schedule_status = $("#schedule_status").val(); var action_type = $("#action_type").val(); console.log(doctor_id, schedule_date, schedule_timeslot, schedule_status, action_type); $.ajax({ url: "modify_schedule_action.php", type: "POST", data: {doctor_id:doctor_id,schedule_date:schedule_date,schedule_timeslot:schedule_timeslot,schedule_status:schedule_status,action_type:action_type}, success: function(data) { alert(data); console.log("Success", data); // 合并两个success逻辑 closeModal(); // 可选:提交成功后自动关闭弹窗 }, error: function(jqXHR, textStatus, errorThrown) { // 正确定义回调参数 console.log("Error:", jqXHR.responseText, textStatus, errorThrown); } }); }); });
PHP代码问题及修复
问题点
- 未输出结果:插入成功后定义的
$output没有被echo,前端无法收到反馈信息。 - 参数未做存在性检查:直接访问
$_POST['action_type']等参数,会在参数缺失时触发Notice错误。 - 未验证SQL执行结果:直接执行插入操作,无法确认是否成功,无法返回准确的状态信息。
修改后的PHP代码
<?php include('../class/Appointment.php'); $object = new Appointment; $output = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 检查action_type参数是否存在 if(isset($_POST['action_type'])){ if($_POST['action_type'] == 'add') { // 检查所有必填参数是否齐全 if(isset($_POST['schedule_date'], $_POST['schedule_status'], $_POST['schedule_timeslot'], $_POST['doctor_id'])){ $data = array( ':schedule_date' => $_POST['schedule_date'], ':schedule_day' => date('l', strtotime($_POST["schedule_date"])), ':schedule_status' => $_POST['schedule_status'], ':schedule_timeslot' => $_POST['schedule_timeslot'], ':doctor_id' => $_POST['doctor_id'], ); $object->query = "INSERT INTO `schedule` (`schedule_date`, `schedule_day`, `schedule_status`, `schedule_timeslot`, `doctor_id`) VALUES (:schedule_date,:schedule_day,:schedule_status,:schedule_timeslot,:doctor_id)"; // 判断SQL执行是否成功 if($object->execute($data)){ $output = 'Data added successfully'; }else{ $output = 'Failed to add data'; } }else{ $output = 'Missing required parameters'; } }else{ $output = 'Invalid action type'; } }else{ $output = 'Action type not specified'; } // 输出最终结果给前端 echo $output; } ?>
内容的提问来源于stack exchange,提问作者Rttt Wer
相关产品推荐
相关产品推荐

