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

AJAX更新数据时responseText无值,条件分支异常问题排查

AJAX更新数据成功但无响应文本,始终走else分支

数据库数据已成功更新,但xhr.onload回调中this.responseText无输出,代码始终执行else分支,用console.log调试也无法获取有效响应值。

相关代码

HTML按钮代码

<button type="button" onclick="upd_general(site_title.value,site_about.value)" class="btn custom-bg text-white">Submit</button>

JS函数代码

function upd_general(site_title_val, site_about_val) {
   let xhr = new XMLHttpRequest();
   xhr.open("POST", "ajax/settings_crud.php", true);
   xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

   xhr.onload = function () {
    console.log('Response:', this.responseText.trim()); // 调试代码
    var myModal = document.getElementById('general-s');
    var modal = bootstrap.Modal.getInstance(myModal);
    modal.hide();

    if (this.responseText.trim() === '1') { // 去除多余空白字符
     js_alert('success', 'Changes Saved!');
     get_general();
    } else {
     js_alert('error', 'No Changes made!');
     get_general();
    }
   };

   xhr.send('site_title=' + encodeURIComponent(site_title_val) + '&site_about=' + encodeURIComponent(site_about_val) + '&upd_general');
}

settings_crud.php代码

if (isset($_POST['upd_general'])) {
 $frm_data = filteration($_POST);

 $q = "UPDATE `settings` SET `site_title`=? , `site_about`=? WHERE `sr_no`=?";
 $values = [$frm_data['site_title'], $frm_data['site_about'], 1];
 $res = update($q, $values, "ssi");
 return $res;
}

filteration函数

function filteration($data)
{
 foreach ($data as $key => $value) {
  $data[$key] = trim($value);
  $data[$key] = stripcslashes($value);
  $data[$key] = htmlspecialchars($value);
  $data[$key] = strip_tags($value);
 }
 return $data;
}

update函数

function update($sql, $values, $datatypes)
{
 $con = $GLOBALS['con'];
 if ($stmt = mysqli_prepare($con, $sql)) {
  mysqli_stmt_bind_param($stmt, $datatypes,...$values);
  if (mysqli_stmt_execute($stmt)) {
   $res = mysqli_stmt_affected_rows($stmt);
   mysqli_stmt_close($stmt);
   return $res;
  } else {
   mysqli_stmt_close($stmt);
   die("Query cannot be executed - Update");
  }
 } else {
  die("Query cannot be prepared - Update");
 }
}

问题原因与解决方法

核心问题是PHP端仅通过return $res返回结果,但AJAX需要的是服务器输出的内容,而非函数返回值。

修复步骤

  1. 修改settings_crud.php代码,将return $res;替换为echo $res;,让服务器把更新结果输出给前端:
if (isset($_POST['upd_general'])) {
 $frm_data = filteration($_POST);

 $q = "UPDATE `settings` SET `site_title`=? , `site_about`=? WHERE `sr_no`=?";
 $values = [$frm_data['site_title'], $frm_data['site_about'], 1];
 $res = update($q, $values, "ssi");
 echo $res; // 替换return为echo,输出结果给AJAX
 exit; // 可选:终止后续代码执行,避免输出多余内容
}
  1. 额外检查点
    • mysqli_stmt_affected_rows($stmt)会在数据有实际修改时返回1,若提交内容与数据库原有内容完全一致,返回值为0,此时前端走else分支属于正常逻辑。
    • 可在PHP端添加调试输出,确认$res的值是否符合预期。

内容的提问来源于stack exchange,提问作者Mujtaba Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:55:23