如何让javascript函数返回选定的数据库条目

如何让javascript函数返回选定的数据库条目,javascript,html,xml,xpath,Javascript,Html,Xml,Xpath,我正在创建一个组织的web目录,该目录使用xml数据库显示所选县内的组织 出于测试目的,我现在只将其设置为显示组织名称和县,但是当我在javascript中有一个县名称标记为//时,这里的主要问题是,返回的是select元素,而不是所选的选项。 所选选项的获取方式如下:选项。selectedOptions[0]和选项。selectedOptions[0]。可以使用innerText获取文本 另一个严重问题是包含选项字符串的XPath查询。字符串被解析为文本,因此它搜索的是“option”,而不是

我正在创建一个组织的web目录,该目录使用xml数据库显示所选县内的组织


出于测试目的,我现在只将其设置为显示组织名称和县,但是当我在javascript中有一个县名称标记为//时,这里的主要问题是,
返回的是select元素,而不是所选的选项。 所选选项的获取方式如下:
选项。selectedOptions[0]
选项。selectedOptions[0]。可以使用innerText
获取文本

另一个严重问题是包含选项字符串的XPath查询。字符串被解析为文本,因此它搜索的是“option”,而不是option变量中包含的数据。它应该是这样的:
name=“/data/record[county[包含(,“+option+”)]]/name”


假设每个数据/记录条目都是唯一的,您不需要在这些节点上使用while循环,因为您将只有一个结果。我不使用XPath,但我假设如果需要,可以使用while循环来迭代子节点

下面是我未经浏览器检查的DisplayData版本。 因为数据作为一个节点的子节点一起存在,所以我只使用一个查询。这非常理想,因为如果需要传递记录数据,它是自包含的

这里有一个例子

函数显示数据(选项){
var selectedOption=option.selectedOptions[0]。innerText;
var xpath='/data//record[包含(./country,“+selectedOption+”)”);
var result=xml.evaluate(xpath,xml.documentElement,null,XPathResult.FIRST\u ORDERED\u NODE\u TYPE,null);
if(result.singleNodeValue!==null&&result.singleNodeValue.children.length>0){
var el=document.getElementById('results');
el.innerHTML='';
var data=result.singleNodeValue.children;
对于(变量i=0,长度=data.length;i';
}
}
}

我找到了问题的答案


需要更改为

这允许javascript中的
选项
变量在更改
name=“/data/record[county[包含(,'Hampshire')]]/name”
name='/data//record[包含(./country,“+option+”)/name'例如slamborne在其答案中建议的


它可以跨浏览器工作。

感谢您的帮助,您的帮助给了我一些有用的信息,但是我需要这些信息来跨浏览器工作,而且您在plunker中输入的内容在chrome中可以正常工作,但在internet explorer或firefox中则不行。另外,很抱歉我之前没有提到它,但我确实需要一个while循环,因为每个县将有多个组织,xml数据中的网址将需要作为超链接输出,这就是为什么我每次提取一个子节点,而不是一次提取所有子节点的原因。这个想法仍在进行中,输出最终将在每个组织的单独div中
<form>
Select your choice of county:
<select onchange="DisplayData(this)">
  <option>---</option>
  <option>UK</option>
  <option>Hampshire</option>
  <option>Surrey</option>
  <option>Berkshire</option>
</select>
</form>
<script>
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
  {
  xhttp=new XMLHttpRequest();
  }
else
  {
  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xhttp.open("GET",dname,false);
try {xhttp.responseType="msxml-document"} catch(err) {} // Helping IE
xhttp.send("");
return xhttp;
}


var x=loadXMLDoc("data.xml");
var xml=x.responseXML;
function DisplayData(option)
{
name="/data/record[county[contains(., 'Hampshire')]]/name";        //<---------
// name="/data/record[county[contains(., option)]]/name";          DISPLAYS ALL COUNTIES
// name="/data/record[county[contains(., $option)]]/name";         DISPLAYS ALL COUNTIES
county="/data/record[county[contains(., 'Hampshire')]]/county";    //<---------

// code for IE
if (window.ActiveXObject || xhttp.responseType=="msxml-document")
{
xml.setProperty("SelectionLanguage","XPath");
nodes1=xml.selectNodes(name);
nodes2=xml.selectNodes(county);
for (i=0;i<nodes1.length;i++)
  {
  document.write("<b>Name:</b> " + nodes1[i].childNodes[0].nodeValue);
  document.write("<br>");
  document.write("<b>County:</b> " + nodes2[i].childNodes[0].nodeValue);
  document.write("<br>");
  document.write("<br>");
  }
}

// code for Chrome, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
var nodes1=xml.evaluate(name, xml, null, XPathResult.ANY_TYPE, null);
var nodes2=xml.evaluate(county, xml, null, XPathResult.ANY_TYPE, null);
var result1=nodes1.iterateNext();
var result2=nodes2.iterateNext();

while (result1)
  {
  document.write("<b>Name:</b> " + result1.childNodes[0].nodeValue);
  document.write("<br>");
  document.write("<b>County:</b> " + result2.childNodes[0].nodeValue);
  document.write("<br>");
  document.write("<br>");
  result1=nodes1.iterateNext();
  result2=nodes2.iterateNext();
  }
}
}
</script>
<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
    <record>
        <name>Hampshire Organisation</name>
        <town>Basingstoke</town>
        <county>Hampshire</county>
        <tele>01234 567890</tele>
        <web>www.hampshireorg.com</web>
    </record>
    <record>
        <name>Surrey Organisation</name>
        <town>Woking</town>
        <county>Surrey</county>
        <tele>01234 567890</tele>
        <web>www.surreyorg.com</web>
    </record>
    <record>
        <name>Berkshire Organisation</name>
        <town>Reading</town>
        <county>Berkshire</county>
        <tele>01234 567890</tele>
        <web>www.berkshireorg.com</web>
    </record>
    <record>
        <name>Nationwide Organisation</name>
        <town>London</town>
        <county>UK</county>
        <tele>01234 567890</tele>
        <web>www.nationwideorg.com</web>
    </record>
</data>
function DisplayData(option) {

  var selectedOption = option.selectedOptions[0].innerText;

  var xpath = '/data//record[contains(./county, "' + selectedOption + '")]';
  var result = xml.evaluate(xpath, xml.documentElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);

  if (result.singleNodeValue !== null && result.singleNodeValue.children.length > 0){

    var el = document.getElementById('results');
    el.innerHTML = '';

    var data = result.singleNodeValue.children;
    for (var i = 0, length = data.length; i < length; i++){
      el.innerHTML += '<li>' + data[i].textContent + '</li>';
    }

  }
}