请教大侠 xmlhttp.responseXML.documentElement返回为unll问题

xyy7309 2015-02-23 11:17:33
测试 1.asp和1.xml页面的内容:

<?xml version="1.0" encoding="utf-8"?>
<note>
<t1>
<bt>您好!1</bt>
<nr>内容1</nr>
<url>http://dotnet1.aspx.cc/</url>
</t1>
<t1>
<bt>您好!2</bt>
<nr>内容2</nr>
<url>http://dotnet2.aspx.cc/</url>
</t1>
</note>

以下代码能获取到1.xml返回的内容,获取1.asp返回内容是unll 。


请教大侠指导 获取1.asp文件的返回内容,为感!


<script type="text/javascript">
var xmlDoc = null, xmlhttp = null;
function loadXML() {
xmlhttp = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp");
if (xmlhttp == null) {
alert("你的浏览器不支持 XMLHttpRequest");
return;
}
//var url = "1.xml";
var url = "1.asp";
xmlhttp.open("GET", url, true);
xmlhttp.setRequestHeader("Content-Type", "text/xml;charset=utf-8");
xmlhttp.onreadystatechange = getmessage;
xmlhttp.send(null);
}

function getmessage() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
xmlDoc = xmlhttp.responseXML.documentElement;
if (xmlDoc == null) {
alert(xmlDoc);
return;
}
var nodes = xmlDoc.getElementsByTagName("t1")
tb = document.getElementById("table_note");
tbody = document.createElement("tbody")
for (i = 0; i < nodes.length; i++)
{
tr = document.createElement("tr")
td = document.createElement("td")
td.innerHTML = nodes[i].getElementsByTagName("bt")[0].childNodes[0].nodeValue
tr.appendChild(td)
td = document.createElement("td")
td.innerHTML = nodes[i].getElementsByTagName("nr")[0].childNodes[0].nodeValue
tr.appendChild(td)
td = document.createElement("td")
url = nodes[i].getElementsByTagName("url")[0].childNodes[0].nodeValue;
td.innerHTML = "<a href='" + url + "'>" + url + "</a>"
tr.appendChild(td)
tbody.appendChild(tr)
}
tb.appendChild(tbody)
}
}
</script>
</head>
<body onLoad="loadXML()">
<table cellpadding="6" id="table_note">
<tr>
<td>标题</td>
<td>内容</td>
<td>网址</td>
</tr>
</table>
</body>
</html>

...全文
150 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2015-02-23
  • 打赏
  • 举报
回复
返回 null,主要是返回的内容没有当成xml对象处理。asp扩展名 默认情况下返回的是text/html类型的,需要明确进行定义MIME类型。

你可以这样写asp,注意
<?xml version="1.0" encoding="utf-8"?>这行当位置很重要,或者去掉 <?xml version="1.0" encoding="utf-8"?> 这行

或者这样写
<%
Response.ContentType="text/xml"
Response.Charset="utf-8"
%><?xml version="1.0" encoding="utf-8"?>

注意:客户端返回的内容中,
<?xml version="1.0" encoding="utf-8"?>
之前不要有任何其它字符,要保证在第一行第一列的位置。

<?xml version="1.0" encoding="utf-8"?>
<%
Response.ContentType="text/xml"
Response.Charset="utf-8"
%>
<note>
<t1>
<bt>您好!1</bt>
<nr>内容1</nr>
<url>http://dotnet1.aspx.cc/</url>
</t1>
<t1>
<bt>您好!2</bt>
<nr>内容2</nr>
<url>http://dotnet2.aspx.cc/</url>
</t1>
</note>


另外,注意你的1.asp文件必须是utf-8格式的,否则中文会乱码并且无法解析/。

也就是使用记事本打开1.asp文件。然后另存成utf-8格式。
xyy7309 2015-02-23
  • 打赏
  • 举报
回复
a.asp 页面代码: <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xml; charset=gb2312" /> <title>无标题文档</title> <script type="text/javascript"> var xmlDoc = null, xmlhttp = null; function loadXML() { xmlhttp = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp"); if (xmlhttp == null) { alert("你的浏览器不支持 XMLHttpRequest"); return; } var url = "b02.asp"; //var url = "b02.xml"; xmlhttp.open("GET", url, true); xmlhttp.setRequestHeader("Content-Type", "text/xml;charset=utf-8"); xmlhttp.onreadystatechange = getmessage; xmlhttp.send(null); } function getmessage() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { var xmlDoc = xmlhttp.responseXML.documentElement; //var xmlDoc = xmlhttp.responseText; //xmlhttp.responseText //xmlhttp.responseXML.documentElement //shownr.innerHTML = xmlDoc; if (xmlDoc == null) { alert(xmlDoc); return; } var nodes = xmlDoc.getElementsByTagName("t1") shownr.innerHTML = nodes; tb = document.getElementById("table_note"); tbody = document.createElement("tbody") for (i = 0; i < nodes.length; i++) { tr = document.createElement("tr") td = document.createElement("td") td.innerHTML = nodes[i].getElementsByTagName("bt")[0].childNodes[0].nodeValue tr.appendChild(td) td = document.createElement("td") td.innerHTML = nodes[i].getElementsByTagName("nr")[0].childNodes[0].nodeValue tr.appendChild(td) td = document.createElement("td") url = nodes[i].getElementsByTagName("url")[0].childNodes[0].nodeValue; td.innerHTML = "<a href='" + url + "'>" + url + "</a>" tr.appendChild(td) tbody.appendChild(tr) } tb.appendChild(tbody) } } </script> </head> <body onLoad="loadXML()"> <span id="shownr"></span><br /> <table cellpadding="6" id="table_note"> <tr> <td>标题</td> <td>内容</td> <td>网址</td> </tr> </table> </body> </html> 1.asp 页面 <?xml version="1.0" encoding="utf-8"?> <note> <t1> <bt>您好!1</bt> <nr>内容1</nr> <url>http://dotnet1.aspx.cc/</url> </t1> <t1> <bt>您好!2</bt> <nr>内容2</nr> <url>http://dotnet2.aspx.cc/</url> </t1> <t1> <bt>您好!3</bt> <nr>内容3</nr> <url>http://dotnet3.aspx.cc/</url> </t1> </note> 1.xml 页面 <?xml version="1.0" encoding="utf-8"?> <note> <t1> <bt>您好!1</bt> <nr>内容1</nr> <url>http://dotnet1.aspx.cc/</url> </t1> <t1> <bt>您好!2</bt> <nr>内容2</nr> <url>http://dotnet2.aspx.cc/</url> </t1> <t1> <bt>您好!3</bt> <nr>内容3</nr> <url>http://dotnet3.aspx.cc/</url> </t1> </note>
xyy7309 2015-02-23
  • 打赏
  • 举报
回复
直接在浏览器中输入http://xxx/xx/1.asp , 查看源代码,前面没有任何空格。
xyy7309 2015-02-23
  • 打赏
  • 举报
回复
引用 6 楼 net_lover 的回复:
我使用你的内容测试时没有问题的,我测试的1.asp完整内容
<?xml version="1.0" encoding="utf-8"?>
<%
 Response.ContentType="text/xml"
 Response.Charset="utf-8" 
%>
<note>
<t1>
<bt>您好!1</bt>
<nr>内容1</nr>
<url>http://dotnet1.aspx.cc/</url>
</t1>
<t1>
<bt>您好!2</bt>
<nr>内容2</nr>
<url>http://dotnet2.aspx.cc/</url>
</t1>
</note>
需要注意几点 1,<?xml version="1.0" encoding="utf-8"?>内容前面不要有空格等字符。 2,如果前面空格无法处理,可以把 <?xml version="1.0" encoding="utf-8"?> 去掉。都可以正确显示 你可以先在浏览器中输入http://xxx/xx/1.asp 看看生成的客户端浏览器的源代码。里面是否带前面的空格
a.asp 是帖子中的代码 1.asp 我测试是直接放了,下面的内容,,但是返回是 unll <?xml version="1.0" encoding="utf-8"?> <note> <t1> <bt>您好!1</bt> <nr>内容1</nr> <url>http://dotnet1.aspx.cc/</url> </t1> <t1> <bt>您好!2</bt> <nr>内容2</nr> <url>http://dotnet2.aspx.cc/</url> </t1> <t1> <bt>您好!3</bt> <nr>内容3</nr> <url>http://dotnet3.aspx.cc/</url> </t1> </note> 1.xml 是1.asp另保存的,返回数据能正常获取。 请您指道!
孟子E章 2015-02-23
  • 打赏
  • 举报
回复
我使用你的内容测试时没有问题的,我测试的1.asp完整内容
<?xml version="1.0" encoding="utf-8"?>
<%
 Response.ContentType="text/xml"
 Response.Charset="utf-8" 
%>
<note>
<t1>
<bt>您好!1</bt>
<nr>内容1</nr>
<url>http://dotnet1.aspx.cc/</url>
</t1>
<t1>
<bt>您好!2</bt>
<nr>内容2</nr>
<url>http://dotnet2.aspx.cc/</url>
</t1>
</note>
需要注意几点 1,<?xml version="1.0" encoding="utf-8"?>内容前面不要有空格等字符。 2,如果前面空格无法处理,可以把 <?xml version="1.0" encoding="utf-8"?> 去掉。都可以正确显示 你可以先在浏览器中输入http://xxx/xx/1.asp 看看生成的客户端浏览器的源代码。里面是否带前面的空格
xyy7309 2015-02-23
  • 打赏
  • 举报
回复
"Content-type:" 这里多了个:号 跟着个不搭噶,现在我就是直接保存2个页面相同内容。1.asp 和 1.xml var url = "1.asp"; //var url = "1.xml"; xmlhttp.open("GET", url, true); xmlhttp.setRequestHeader("Content-Type", "text/xml;charset=utf-8"); xmlhttp.onreadystatechange = getmessage; xmlhttp.send(null); 访问1.xml 页面能获取到返回内容,访问1.asp 返回 unll
xyy7309 2015-02-23
  • 打赏
  • 举报
回复
引用 3 楼 net_lover 的回复:
msg打印出显示的是什么? "Content-type:" 这里多了个:号 msg里面带 <?xml version="1.0" encoding="utf-8"?> 吗? 你可以替换掉试试啊
就是这样的内容: <?xml version="1.0" encoding="utf-8"?> <note> <t1> <bt>您好!1</bt> <nr>内容1</nr> <url>http://dotnet1.aspx.cc/</url> </t1> <t1> <bt>您好!2</bt> <nr>内容2</nr> <url>http://dotnet2.aspx.cc/</url> </t1> <t1> <bt>您好!3</bt> <nr>内容3</nr> <url>http://dotnet3.aspx.cc/</url> </t1> </note>
孟子E章 2015-02-23
  • 打赏
  • 举报
回复
msg打印出显示的是什么?
"Content-type:"
这里多了个:号

msg里面带
<?xml version="1.0" encoding="utf-8"?>
吗?

你可以替换掉试试啊
xyy7309 2015-02-23
  • 打赏
  • 举报
回复
引用 1 楼 net_lover 的回复:
返回 null,主要是返回的内容没有当成xml对象处理。asp扩展名 默认情况下返回的是text/html类型的,需要明确进行定义MIME类型。 你可以这样写asp,注意 <?xml version="1.0" encoding="utf-8"?>这行当位置很重要,或者去掉 <?xml version="1.0" encoding="utf-8"?> 这行 或者这样写 <% Response.ContentType="text/xml" Response.Charset="utf-8" %><?xml version="1.0" encoding="utf-8"?> 注意:客户端返回的内容中, <?xml version="1.0" encoding="utf-8"?> 之前不要有任何其它字符,要保证在第一行第一列的位置。
<?xml version="1.0" encoding="utf-8"?>
<%
 Response.ContentType="text/xml"
 Response.Charset="utf-8" 
%>
<note>
<t1>
<bt>您好!1</bt>
<nr>内容1</nr>
<url>http://dotnet1.aspx.cc/</url>
</t1>
<t1>
<bt>您好!2</bt>
<nr>内容2</nr>
<url>http://dotnet2.aspx.cc/</url>
</t1>
</note>
另外,注意你的1.asp文件必须是utf-8格式的,否则中文会乱码并且无法解析/。 也就是使用记事本打开1.asp文件。然后另存成utf-8格式。
是的,1.asp页面就是这样写的: <%@ CODEPAGE=65001 %> <% Response.CodePage=65001 %> <% Response.ContentType="text/xml" %> <% Response.Charset="UTF-8" %> <% geturl = "http://api.xxx.com/rest?sign=" & sign & "&key=" & key & "&fields=" & fields '发送接收 set http = Server.CreateObject("Microsoft.XMLHTTP") http.Open "GET", geturl, false http.setRequestHeader "Content-type:", "text/xml;charset=utf-8" http.Send msg=http.ResponseText set http = nothing response.write msg %>

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧