AJAX 解析xml 常见定义JSON数据的格式
ResultXmlAjax.js
function createXmlHttpRequest(){ var xmlHttp; try { xmlHttp = new XMLHttpRequest(); } catch (e) { var MSXML = ['MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP','Microsoft.XMLHTTP']; for ( var i = 0; i < MSXML.length; i++) { try { xmlHttp = new ActiveXObject(MSXML[i]); alert(MSXML[i]); break; } catch (e) { } } } return xmlHttp; } function getResultXmlAjax(){ /** * 1、获取ajax对象XmlHttpRequest * */ var ajax = createXmlHttpRequest(); /** * 2、打开请求 */ ajax.open("post","resultXmlAjax",true); /** * 3、 * /** * application/x-www-form-urlencoded就是:jsp form enctype 属性 * 默认的 * <form action="" enctype="application/x-www-form-urlencoded"></form> * 设置MIME类型 如果是post提交 * 需将Content-type的首部设置为application/x-www-form-urlencoded * 他会告知服务器正在发送数据 并且数据已经符合URL编码了 */ ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); /** * 当状态改变时 会调用onreadystatechange属性 指定回调函数 */ /** * readyState * 0代表初始化 * 1代表正在加载...open方法一调用 但是send方法还没调用 * 2代表以加载完毕 send已被调用 请求已经开始 * 3代表交互中...服务器正在发送相应 * 4代表完毕...相应发送完毕 并且我们ajax对象可以通过responseText获取返回数据 */ //制定相应处理函数 ajax.onreadystatechange= function (){ //对象状态 if(ajax.readyState == 4){ /** * status * 在XmlHttpRequest对象中 服务器发送的状态码都保存在status属性中 * 可以通过把这个值和200、304比较 可以确保服务器是否 * 已发送了一个成功的相应 */ //信息已成功返回 200 没有被修改304 if (ajax.status=='200' || ajax.status == '304') { //处理信息数据 //alert(111); //alert(ajax.responseText); /** * responseXML * 获取后台xml格式的数据 */ var dom = ajax.responseXML; //获取根节点 var root = dom.lastChild; //获取tag var users = root.getElementsByTagName("user"); for ( var i = 0; i < users.length; i++) { var user = users[i]; var id = user.getAttribute("userId"); alert(id); var name = user.lastChild.lastChild.nodeValue; alert(name); } } } }; /** * 发送Send */ ajax.send("id=001"); } /** * JSON * */ var user1 = new Object(); user1.name = "张三"; user1.password = "123456"; //alert(user1.name); var user2 = {}; user2.name = "张三"; user2.password = "123456"; //alert(user2.name); var user3 = {"name":"张三","password":"123456"}; //var user3 = ({"name":"张三","password":"123456"}); //alert(user3.name); function evalObject(s){ return eval("("+s+")"); } //这种不加()是错的 但是可以 //var user4rStr = '{"name":"张三","password":"123456"}'; //这种也可解析 //var user4 = evalObject(user4rStr); //必须加()才能解析 var user4rStr = '({"name":"张三","password":"123456"})'; var user4 = eval(user4rStr); //alert(user4.name); //数组 列表 var arr = '[{"name":"张三","password":"123456"},{"name":"李四","password":"123456"}]'; var users = evalObject(arr); alert(users[0].name); alert(users[1].name); alert(users[0].password); alert(users[1].password);
resultXmlAjax.jsp
<body>
<input type="button" value="请求" οnclick="getResultXmlAjax();">
</body>
ResultXmlAjax :Servlet
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/xml");
PrintWriter out = response.getWriter();
StringBuffer buffer = new StringBuffer();
buffer.append("<root>")
.append("<user userId = '1'>")
.append("<name>张三</name>")
.append("</user>")
.append("<user userId = '2'>")
.append("<name>王五</name>")
.append("</user>")
.append("</root>");
out.print(buffer.toString());
}