Ajax返回ID Kurir不存在结果时未触发告警且仍更新表单字段问题
问题根因
故障核心原因是后端返回的响应内容首尾存在多余的空白字符/不可见字符,导致前端全等判断不匹配:
- 常见的多余字符包括PHP文件开头/结尾的空格、换行、UTF-8 BOM头、PHP代码执行过程中意外输出的内容
- 因为判断
response == "ID Kurir tidak di temukan"不成立,所以代码直接走到了赋值的else分支
定位步骤
- 前端调试:在Ajax的success回调第一行添加打印代码,查看原始响应内容:
success: function(response) { console.log('原始响应内容:', JSON.stringify(response)); console.log('响应长度:', response.length); // 手动计算目标字符串"ID Kurir tidak di temukan"的长度为25,若打印长度大于25,即可确认存在多余字符 }
- 后端排查:检查
checkdata.php文件,确认<?php标签前没有任何内容,文件末尾不要留多余的空行,尽量删除末尾的?>标签避免意外输出。
修复方案
前端兼容修复
在判断前先对响应内容做trim处理,去除首尾所有空白/不可见字符:
$(document).on("keypress", ".idkurir", function(e) { var idkurir = $('#idkurir').val(); if (e.which == 13) { $.ajax({ type: "POST", url: "checkdata.php", data: { idkurir: idkurir }, success: function(response) { // 新增trim处理,清除首尾多余字符 response = response.trim(); if (response == "1") { alert("Kurir sudah laporan"); } else if (response == "ID Kurir tidak di temukan") { alert(response); } else { var d = new Date(); var today_date = ("0" + d.getDate()).slice(-2) + ("0" + (d.getMonth() + 1)).slice(-2); $('#nolaporan').val(idkurir + today_date); $('#namakurir').val(response); } } }); } });
后端根源修复
在输出响应前清空输出缓冲区,输出完成后直接终止执行,避免后续内容意外输出:
<?php session_start(); // 清空之前所有意外输出的内容 ob_clean(); $connect = mysql_connect("localhost", "root", ""); mysql_select_db("reportchecker", $connect); $idkurir = $_POST["idkurir"]; $nolaporan = $idkurir . date("dm"); $sql = "SELECT * FROM jampulang WHERE nolaporan = '$nolaporan'"; $result = mysql_query($sql, $connect); $count = mysql_num_rows($result); $sql2 = "SELECT * FROM kurir WHERE idkurir = '$idkurir'"; $result2 = mysql_query($sql2, $connect) or die(mysql_error()); $count2 = mysql_num_rows($result2); if ($count == 1) { echo "1"; } else if ($count2 == 1) { $row = mysql_fetch_array($result2) or die(mysql_error()); echo $row['nama']; } else { echo "ID Kurir tidak di temukan"; } // 终止执行,避免后续输出多余内容 exit; // 这里不要加?>标签,避免末尾空行输出
额外优化建议
- 当前使用的
mysql扩展已经在PHP7及以上版本被废弃,建议更换为mysqli或PDO扩展操作数据库 - 现有代码存在SQL注入风险,需要对传入的
idkurir参数做转义处理,或者使用预处理语句执行SQL查询
内容的提问来源于stack exchange,提问作者Aga
相关产品推荐
相关产品推荐

