无法从xml标记获取属性值

时间:2015-11-27 20:40:09

标签: javascript php ajax xml

我是AJAX和XML的新手。

我有以下XML:

<rsp stat="ok">
<auth>
<token>123-123</token>
<perms>read</perms>
<user nsid="id" username="user_name" fullname="Full Name"/>
</auth>
</rsp>

我有以下代码:

 function readXML(xml)
    {
        var xmlDoc = xml.responseXML;
        var x = xmlDoc.getElementsByTagName("user");
        document.getElementById("dummy").innerHTML= x.getAttribute("username"));
window.location.replace("path/info.php?username="+ x.getAttribute("username"));
    }

    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function()
    {
        if(xhttp.readyState==4 && xhttp.status==200)
        {
            readXML(xhttp)
        }
    }

    xhttp.open("GET", <?php echo ($url);?>, true);
    xhttp.send();

我无法获取<user> xml标记的任何属性(nsid,用户名,全名)。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

在此行的末尾有一个结束括号)

document.getElementById("dummy").innerHTML= x.getAttribute("username"));

更新这两行:

document.getElementById("dummy").innerHTML= x.getAttribute("username"));
window.location.replace("path/info.php?username="+ x.getAttribute("username"));

document.getElementById("dummy").innerHTML= x[0].getAttribute("username");
window.location.replace("path/info.php?username="+ x[0].getAttribute("username"));

x现在为x[0],因为xmlDoc.getElementsByTagName("user")中的getElementsByTagName会返回HTMLCollection,您想要此集合中的第一项。

答案 1 :(得分:0)

尝试:

$xml=simplexml_load_file("FileName.xml") or die("Error: Cannot create object");
$xml->user['nsid'];
$xml->user['username'];
$xml->user['fullname'];

答案 2 :(得分:0)

您应该在JavaScript中使用库进行ajax / xml处理。最受欢迎的图书馆是jQuery(非常强大,所以请看一下!)。

使用jQuery的简单示例如下所示:(sample os jsFiddle

// Callback for processing the response from the server
var callback = function (data) { 
    var token = data.getElementsByTagName("token");
    var tokenValue = token[0].innerHTML;


    var user = data.getElementsByTagName("user");
    var usernameAttributeValue = user[0].getAttribute("username");
};

// Actually calls the server, ajax endpoint, and calls callback on response
$.ajax(ajaxEndpointUrl).done(callback);