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

使用AJAX从数据库取数,结果闪显后消失问题求助

问题原因及解决方法

问题根源

你页面里的按钮类型是submit,点击后会触发表单的默认提交行为——浏览器会刷新页面(或跳转到表单指定的action地址),导致AJAX获取到的内容刚显示就被页面刷新冲掉了。

解决方案

下面提供几种简单有效的修复方式:

方式1:修改按钮类型为button

直接把按钮的type="submit"改成type="button",彻底避免触发表单提交:

<form class="form-inline">
  
  <div class="form-group mb-2 ml-0">
    <label for="accnum1" class="sr-only">Account Number</label>
    <input type="text" class="form-control" id="accnum1" placeholder="Account number">
  </div>
  <button type="button" class="btn btn-secondary mb-2 mr-1">[x]</button>
  <button type="button" class="btn btn-primary mb-2" onclick='showUser(document.getElementById("accnum1").value);'>Search Profile</button>
</form>
<div id="txtHint"><b>Person info will be listed here...</b></div>

方式2:在点击事件中阻止默认行为

如果不想修改按钮类型,可在onclick事件末尾添加return false,阻止表单提交:

<button type="submit" class="btn btn-primary mb-2" onclick='showUser(document.getElementById("accnum1").value); return false;'>Search Profile</button>

方式3:通过事件对象阻止默认行为

更规范的做法是利用事件对象的preventDefault()方法:

function showUser(str, event) {
  // 阻止表单默认提交行为
  event.preventDefault();
  
  if (str == "") {
    document.getElementById("txtHint").innerHTML = "";
    return;
  } else {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
        document.getElementById("txtHint").innerHTML = this.responseText;
      }
    };
    xmlhttp.open("GET","family.php?q="+str,true);
    xmlhttp.send();
  }
}

对应的按钮代码:

<button type="submit" class="btn btn-primary mb-2" onclick='showUser(document.getElementById("accnum1").value, event);'>Search Profile</button>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:35:12