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

XML解析实现输入匹配校验时告警弹窗误触发问题求解

问题根因

错误告警逻辑被放在了for循环体内部,每遍历一个<product>节点就会执行一次判断:只要当前遍历的节点还没匹配到,就会触发一次alert,没有等所有节点遍历完成,自然会出现多次误触发的问题。

修复方案

把错误告警的判断逻辑移到for循环外面,等所有XML节点遍历完成后,再判断是否存在匹配项,没有匹配再弹出告警。同时可以将标记变量改为语义更清晰的布尔类型,匹配成功后跳出循环减少不必要的遍历。

修正后代码

<script>
async function loadData() {
  var data = await fetch("Product.xml");
  var parsedData = await data.text();

  var parser = new DOMParser();
  var Product_document = parser.parseFromString(parsedData,"text/xml");
  var results = "";
  var isMatch = false; // 布尔类型匹配标记,语义更明确
  var user_id_input = document.getElementById("user_id").value;
  var todos = Product_document.getElementsByTagName("product");
  
  for(var i = 0; i < todos.length; i++) {
    var Name = todos[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue;
    var Code = todos[i].getElementsByTagName("Code")[0].childNodes[0].nodeValue;
    var Quantity = todos[i].getElementsByTagName("Quantity")[0].childNodes[0].nodeValue;
    var Description = todos[i].getElementsByTagName("Description")[0].childNodes[0].nodeValue;
    var Price = todos[i].getElementsByTagName("Price")[0].childNodes[0].nodeValue;
    
    if(user_id_input === Code) {
      results = "<div>"
      + "Code: " + Code 
      + ",<br/> Name: " + Name 
      + ", <br/>Quantity: " +  Quantity 
      + ",<br/> Description  " +  Description 
      + ",<br/> Price " +  Price
      + "</div><br/>";
      isMatch = true;
      break; // 匹配成功后直接跳出循环,无需遍历剩余元素
    }
  }
  
  // 所有元素遍历完成后再判断是否触发告警
  if(!isMatch) {
    alert("Error");
  }
  
  document.getElementById("results").innerHTML = results;
}
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:45:05