You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:36:04