XML在jquery中解析XMLHttpResponse

时间:2011-06-21 09:16:51

标签: javascript jquery xml

我得到以下回复,我希望得到sessiontoken的值,即。-4611685691785827288

<com.abc.csm.common.LoginResponse>
<sessiontoken>-4611685691785827288</sessiontoken>
<isSuccess>true</isSuccess>
<_-print_-names>false</_-print_-names>
 <_-hash_-code>0</_-hash_-code>
</com.abc.csm.common.LoginResponse><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0     Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
... and so on

所以我写了下面的代码来得到我想要的东西,但它给了我未定义的

var url_action="/csm/login.action";
             var client; 
             var dataString;

             if (window.XMLHttpRequest){ 
                 client=new XMLHttpRequest();
             } else {                    
                 client=new ActiveXObject("Microsoft.XMLHTTP");
             }

             client.onreadystatechange=function(){

                 if(client.readyState==4&&client.status==200)
                 {
                     xml=client.responseText;
                     $(xml).find("com.abc.csm.common.LoginResponse").each(function()
                    {
                         sessiontoken= $(this).find('sessiontoken').text();

                    });
                    alert(sessiontoken); //here i get undefined
                 }
             };

             dataString="emailaddress="+document.getElementById("email_id").value+"&projectid="+document.getElementById("project_id").value;
             client.open("POST",url_action,true);
             client.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

             client.send(dataString);

@Vivek后编辑:已回复

$(function() {
    $("#loginSubmitBtn").click(submitLogin);

    function submitLogin()
    {
        if(validate()) //this is true
        {
            $.post("/csm/login.action",function(xml) {
                alert(xml); 
            });
        }
    }
});

2 个答案:

答案 0 :(得分:1)

您基本上传输的是两个单独的XML文件连接在一起 - 您有一个以<com.abc.csm.common.LoginResponse>标记开头的文件,然后另一个是XHTML文档。

但是您将它们视为单个XML文档。问题是单个XML文档必须只有一个根元素;换句话说,它必须有一个包裹整个文档的元素。在您的情况下,情况并非如此,因为<com.abc.csm.common.LoginResponse>是根元素,但随后结束,然后<html>作为新的根元素启动。

因此,它无法通过XML解析器进行解析,这是您在调用$(xml)时尝试执行的操作。

解决方法是在整个文档周围提供包装XML元素,或者在尝试将其解析为XML之前将输出拆分为两个单独的块。

答案 1 :(得分:0)

我认为在jquery中你可以缩短代码并提高可读性。

$.post(url,function(xml) {
        $(xml).find("com.abc.csm.common.LoginResponse").each(function()         {                          
            sessiontoken= $(this).find('sessiontoken').text();  
            alert(sessiontoken);                        
          });                     

    });