Javascript 应用程序/xml与文本/xml内容类型
我正在尝试从servlet获取XML响应。servlet返回的内容类型为“application/xml”。使用XmlHttpRequest,我可以得到responseText,但不能得到responseXml。我想知道这是否与内容类型或请求类型有关(我正在进行GET) 非常感谢 我把所有的文件都删减了。我想我的设置是正确的。以下是我所拥有的: -------HTML------ -------Servlet--------Javascript 应用程序/xml与文本/xml内容类型,javascript,xml,ajax,http,get,Javascript,Xml,Ajax,Http,Get,我正在尝试从servlet获取XML响应。servlet返回的内容类型为“application/xml”。使用XmlHttpRequest,我可以得到responseText,但不能得到responseXml。我想知道这是否与内容类型或请求类型有关(我正在进行GET) 非常感谢 我把所有的文件都删减了。我想我的设置是正确的。以下是我所拥有的: -------HTML------ -------Servlet-------- import java.io.BufferedOutputStream
import java.io.BufferedOutputStream;
导入java.io.IOException;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.apache.log4j.Logger;
导入org.apache.log4j.LogManager;
公共类SimpleServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
私有静态记录器Logger=LogManager.getRootLogger();
公共无效服务(HttpServletRequest-req、HttpServletResponse-res)抛出ServletException、IOException{
BufferedOutputStream bs=null;
字符串simpleResponse=“hi”;
试一试{
res.setContentType(“text/xml”);
res.setCharacterEncoding(“UTF-8”);
bs=新的BufferedOutputStream(res.getOutputStream());
write(simpleResponse.getBytes());
}捕获(例外情况除外){
logger.error(“JboardSearchServlet.service():error=,ex);
}最后{
b.flush();
bs.close();
}
}
}
哦,天哪!我刚刚(在别人看了之后)解决了我的整个问题
我使用的是“responseXml”而不是“responseXml”。该死,那些大写字母=)
responseXml
可能很挑剔。尝试这些步骤,然后报告。更糟的是,你可能不得不这样做。谢谢!我尝试将编码设置为UTF-8,将内容类型设置为application/xml和text/xml,但似乎在所有组合中,responseXml总是未定义。我还将尝试手动解析responseText。
<html>
<head>
<title></title>
<script src="js/jboard_simple.js" type="text/javascript"> </script>
</head>
<body>
<div id="myDiv">
<h2>No results yet....</h2>
</div>
<form name="searchForm" id="searchForm_id">
<input type="text" name="searchString" id="searchString_id" />
<button type="button" onclick="loadXMLDoc()">Perform Search</button>
</form>
</body>
</html>
function loadXMLDoc() {
document.getElementById("myDiv").innerHTML = "searching...";
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
// Do something here...
alert(xmlhttp.responseText);
alert(xmlhttp.responseXml);
processSearchServletResponse(xmlhttp.responseText);
}
}
// Find teh search string
var searchString_el = window.document.getElementById('searchString_id');
var searchString = searchString_el.value;
alert('searchString: ' + searchString);
var searchUrl = "/SimpleServlet?searchString=" + searchString;
xmlhttp.open("GET", searchUrl, true);
xmlhttp.send();
}
function processSearchServletResponse(xmlTxt) {
document.getElementById("myDiv").innerHTML = xmlTxt;
}
import java.io.BufferedOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
public class SimpleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static Logger logger = LogManager.getRootLogger();
public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
BufferedOutputStream bs = null;
String simpleResponse = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>hi</root>";
try {
res.setContentType("text/xml");
res.setCharacterEncoding("UTF-8");
bs = new BufferedOutputStream(res.getOutputStream());
bs.write(simpleResponse.getBytes());
} catch (Exception ex) {
logger.error("JboardSearchServlet.service(): error = ", ex);
} finally {
bs.flush();
bs.close();
}
}
}