您的位置:首页 > 数据库

AJAX——连接数据库并且返回XML数据

2015-01-06 14:40 274 查看
AJAX可以返回xml数据,现在用的比较多的是json表达式。连接数据库需要用到驱动的jar包。提前加到lib文件夹下。

<html>
<head>
<script src="js/selectcustomer_xml.js"></script>
</head>
<body>

<form action="">
<label>选择客户: <select name="customers"
onchange="showCustomer(this.value)">
<option value="1">Alfreds Futterkiste</option>
<option value="2">North/South</option>
<option value="3">Wolski Zajazd</option>
</select>
</label>
</form>

<b><span id="companyname"></span>
</b>
<br />
<span id="contactname"></span>
<br />
<span id="address"></span>
<span id="city"></span>
<br />
<span id="country"></span>

</body>
</html>js文件如下:
var xmlHttp;

function showCustomer(str) {
//alert(str);
xmlHttp = GetXmlHttpObject();
if (xmlHttp == null) {
alert("Your browser does not support AJAX!");
return;
}
var url = "jsp/getcustomer_xml.jsp";
url = url + "?q=" + str;
url = url + "&sid=" + Math.random();
xmlHttp.onreadystatechange = stateChanged;
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
}

function stateChanged() {
if (xmlHttp.readyState == 4) {
alert(xmlHttp.responseText);
alert(xmlHttp.responseXML.documentElement);
var xmlDoc = xmlHttp.responseXML.documentElement;
alert(xmlDoc.getElementsByTagName("compname")[0]);
document.getElementById("companyname").innerHTML = xmlDoc
.getElementsByTagName("compname")[0].childNodes[0].nodeValue;
document.getElementById("contactname").innerHTML = xmlDoc
.getElementsByTagName("contname")[0].childNodes[0].nodeValue;
document.getElementById("address").innerHTML = xmlDoc
.getElementsByTagName("address")[0].childNodes[0].nodeValue;
document.getElementById("city").innerHTML = xmlDoc
.getElementsByTagName("city")[0].childNodes[0].nodeValue;
document.getElementById("country").innerHTML = xmlDoc
.getElementsByTagName("country")[0].childNodes[0].nodeValue;
}
}

function GetXmlHttpObject() {
var xmlHttp = null;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
} catch (e) {
// Internet Explorer
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}jsp文件如下:
<%@ page pageEncoding="UTF-8" import="java.sql.*,java.io.*" %>

<%
String q = request.getParameter("q");
System.out.println(q);
Connection conn = null;
Statement stmt = null;
try{
String url= "jdbc:mysql://localhost:3306/test?user=root&password=root&useUnicode=true&characterEncoding=GB2312";
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn= DriverManager.getConnection(url);

String sql="SELECT * FROM CUSTOMERS ";
sql=sql+" WHERE CUSTOMERID='"+q+"'";
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);

response.setCharacterEncoding("utf-8");
response.setHeader("ContentType","text/xml");
response.setContentType("text/xml;charset=utf-8");
//out.clear();
PrintWriter out1 = response.getWriter();
//out1.flush();
out1.print("<?xml version='1.0' encoding='UTF-8'?>");
while(rs.next()){
System.out.println(rs.getString("companyname"));
out1.print("<company>");
out1.print("<compname>" +rs.getString("companyname")+ "</compname>");
out1.print("<contname>" +rs.getString("contactname")+ "</contname>");
out1.print("<address>" +rs.getString("address")+ "</address>");
out1.print("<city>" +rs.getString("city")+ "</city>");
out1.print("<country>"+rs.getString("country")+ "</country>");
out1.print("</company>");
}
out1.flush();
}catch(Exception e){
out.print(e.getMessage());
}finally{
stmt.close();
conn.close();
}
%>
需要注意的是,处理xml时最好使用servlet。如果用jsp的时候设置如下:
response.setCharacterEncoding("utf-8");
response.setHeader("ContentType","text/xml");
response.setContentType("text/xml;charset=utf-8");这时候如果这个jsp文件中有html的标签和设置。返回的xml将无法读取。因此在这里把html和head标签全部去掉了。仅留下了jsp的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  AJAX mysql xml
相关文章推荐