问题描述
|
在以下代码中,我在PHP文件中回显了$ strXML,该文件显示了整个$ strXML,但是我只想在javascript中显示\'name \'元素值。有谁能够帮助我?
PHP的:
$strXML = \'<? xml version=\"1.0\" ?>\'.\"\\n\";
$id = $_GET[\'id\'];
$name = $_GET[\'name\'];
$strXML .= \'<data>\'.\"\\n\";
$strXML .= \'<id>\'.$id.\'</id>\'.\"\\n\";
$strXML .= \'<name>\'.$name.\'</name>\'.\"\\n\";
$strXML .= \'</data>\'.\"\\n\";
echo $strXML;
javascript:
var xhr = createRequest();
function getData() {
if(xhr) {
var id = document.getElementById(\"id\").value;
var name = document.getElementById(\"name\").value;
var url = \"search.PHP?id=\" + id + \"&name=\" + name;
xhr.open(\"GET\",url,true);
xhr.onreadystatechange = show;
xhr.send(null);
}
}
function show()
{
if ((xhr.readyState == 4) &&(xhr.status == 200))
{
var strXML = xhr.responseText;
alert(strXML);
}
}
解决方法
responseText
属性是一个字符串(规范中为DOMString,但在JavaScript中仅为a3ѭ),因此您无法在其上调用getElementsByTagName
。您想看xhr.responseXML
。
同样,getElementsByTagName
在被调用的元素下方搜索:
搜索指定元素下面的子树,不包括元素本身。
因此,您将不得不直接访问内容,而不是在循环内:
var result = xhr.responseXML;
var id = result.getElementsByTagName(\'id\' ).childNodes[0].nodeValue;
var name = result.getElementsByTagName(\'name\').childNodes[0].nodeValue;
如果要返回多个<data>
元素(因此使用use9ѭ循环),则必须将PHP的返回值包装在另一个元素中:
<results>
<data>
<id>$id</id>
<name>$name</name>
</data>
<!-- etc. -->
</results>
,不要批评您当前的决定,但是我发现,如果您使用JSON来回传输数据,则使用PHP和JavaScript的组合要容易得多。 PHP具有创建JSON和JavaScript的出色方法,好吧,它就是JavaScript。我认为这通常会使开发变得容易得多:
<?php
$data = array(
\'data\' => array(
\'id\' => $_GET[\'id\'],\'name\' => $_GET[\'name\']
)
);
echo json_encode( $data );
在JS方面:
var xhr = createRequest();
function getData() {
if(xhr) {
var id = document.getElementById(\"id\").value;
var name = document.getElementById(\"name\").value;
var url = \"search.php?id=\" + id + \"&name=\" + name;
xhr.open(\"GET\",url,true);
xhr.onreadystatechange = show();
xhr.send(null);
}
}
function show()
{
if ((xhr.readyState == 4) &&(xhr.status == 200))
{
var response = eval(\'(\' + xhr.responseText + \')\');
alert( response.data.id );
}
}
当然,如果您已经在其他地方使用XML(例如,在Web服务中或使用XSLT显示页面),那么XML会更有意义。不过只是我的$ 0.02。