if语句判断XMLHttpRequest返回的responseText不生效问题求助
问题根因
你的代码判断失败90%以上的概率是HTTP响应返回的内容不是纯字符串"0",存在多余的空白字符:
- send.php代码中两个
<?php ?>块之间存在空行,空行会被直接当做输出内容返回给前端 - 引入的
dbh.inc.php文件如果存在前置/后置空白、或者有额外的调试输出,也会污染返回内容 - PHP文件末尾如果有多余的换行,也会被附加在输出内容后,导致实际拿到的是
"0\n"、" 0"这类和"0"不相等的字符串
修复方案
PHP端修改(根除多余输出)
把send.php的代码整合为单个PHP块,删除所有不必要的空白,输出前清空缓冲区,且末尾不要写?>标签避免尾部换行被输出:
<?php session_start(); include "dbh.inc.php"; ob_clean(); // 清空之前的所有输出,避免引入文件的输出污染结果 $sqll = "SELECT * FROM `like-unlikes` WHERE `post_user`='".$_SESSION['username']."' AND `Stauts`=0"; $queryy = mysqli_query($conn, $sqll); if($queryy){ if(mysqli_num_rows($queryy) > 0){ echo "0"; } else { echo "1"; } } exit; // 输出后直接终止,避免后续有额外内容输出
JS端修改(兼容空白干扰)
拿到响应内容后先调用trim()方法清除首尾所有空白字符再做判断:
setInterval(()=>{ var http =new XMLHttpRequest(); http.open("GET","send.php",true); http.setRequestHeader("Content-type","application/x-www-form-urlencoded"); http.onreadystatechange= function(){ if(http.readyState==4 && http.status==200){ var pu = http.responseText.trim(); // 新增trim处理 // 也可以转成数字判断更稳妥:if(Number(pu) === 0) if(pu == "0"){ //do A } else { // Do B } } } http.send(); }, 1000)
排查验证
如果修改后还是有问题,可以在JS判断前加console.log('返回内容:', pu, '内容长度:', pu.length),打开浏览器控制台看实际返回的内容和长度,如果长度不是1就说明还有多余字符,再对应排查PHP端的输出即可。
内容的提问来源于stack exchange,提问作者Harshit tanwar
相关产品推荐
相关产品推荐

