在下面的代码中,我在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);
}
}
答案 0 :(得分:1)
responseText
属性是一个字符串(规范中的DOMString,但在JavaScript中只是String
),因此您无法在其上调用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>
元素(因此,使用你的for
循环),那么你必须将PHP中的返回值包含在另外一个元素中:
<results>
<data>
<id>$id</id>
<name>$name</name>
</data>
<!-- etc. -->
</results>
答案 1 :(得分:1)
不要批评你当前的决定,但我发现如果使用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美元。