回应php数据

时间:2011-05-24 04:21:17

标签: php javascript xml

在下面的代码中,我在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);  
    }
}

2 个答案:

答案 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美元。