我得到以下回复,我希望得到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);
});
}
}
});
答案 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);
});
});