回显 PHP 数据

echoing php data

本文关键字:数据 PHP 回显      更新时间:2023-09-26

在下面的代码中,我在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 中的一个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>

不是要批评你当前的决定,但我发现如果你使用 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 美元。