都市のすべての名前を取得し、json 形式の文字列を返すこの Web サービスがあります。
public String getDataForTowns( ) throws ClassNotFoundException
{
String strXml = "";
Class.forName("org.postgresql.Driver");
try
{
conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/plovdivbizloca", "postgres", "tan");
}
catch (SQLException ex) {
ex.printStackTrace();
}
Statement mystmt = null;
String selectQuery = "select * from municipality_id";
try {
mystmt = conn.createStatement();
ResultSet mysr = mystmt.executeQuery(selectQuery);
ResultSetMetaData rsmd = mysr.getMetaData();
int colCount = rsmd.getColumnCount();
int numberrow = 0;
strXml += "{\"rows\": [";
while (mysr.next())
{
String townname = mysr.getString(2);
String townid=mysr.getString(1);
strXml += "{\"town\":\"" + townname
+ "\", \"id\":" + townid + "},";
//strXml += ",";
}
strXml += "]}";
}
catch (Exception ex)
{
}
return strXml;
}
クライアント側にはこの機能があり、アラートステートメントで「無効な文字」という例外が発生します。
function loadTownSelect()
{
select = document.getElementById('sphSel');
createXMLHttpRequest();
var txtDrop = new Array();
var idDrop= new Array();
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
alert(xmlhttp.responseText);
var xmlObj = xmlhttp.responseXML;
var textXML = xmlObj.documentElement.firstChild.firstChild.nodeValue;
alert(textXML);
var nwresp = JSON.parse(textXML);
alert (nwresp.rows[2].town);
}
}
var url = "http://localhost:9091/localbusscat/services/localbusscat/getDataForTowns";
xmlhttp.open("GET", url, true);
xmlhttp.send();
}