AJAX, reponseXML undefined on callback
Using AJAX, I am making a POST request to the server to update a couple of variables. The servlet contains the following code:
getHttpResponse().setContentType("text/xml");
getHttpResponse().setHeader("Cache-Control","no-cache");
getHttpResponse().getWriter().println(getXML(var1, var2));
getHttpResponse().getWriter().flush();
The XML created looks similar to this:
<?xml version=\"1.0\"?><var1>10</var1><var2>3</var2>
The callback function is successfully entered, but responseXML remains undefined:
function callback(){
if (req.readyState == 4){
if (req.status == 200){
// printing req.responseXML.value shows 'Undefined'
}
}
}
What am I potentially missing or overlooking? Thanks.
//AjaxServer.java
import java.io.IOException;
import java.util.HashMap;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @version 1.0
* @author
*/
public class AjaxServer extends HttpServlet {
private ServletContext context;
private HashMap users = new HashMap();
public void init(ServletConfig config) throws ServletException {
this.context = config.getServletContext();
users.put("greg","account data");
users.put("duke","account data");
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String targetId = request.getParameter("id");
System.out.println("Got Request : "+targetId);
if ((targetId != null) && users.containsKey(targetId.trim())) {
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write("<message>valid</message>");
} else {
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write("<message>invalid</message>");
}
}
}
//AjaxClient.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<META name="GENERATOR" content="IBM WebSphere Studio">
<META http-equiv="Content-Style-Type" content="text/css">
<LINK href="theme/Master.css" rel="stylesheet"
type="text/css">
<TITLE>AjaxClient.html</TITLE>
<script language="javascript">
var req;
function validate() {
alert("In Validate");
var idField = document.getElementById("userid");
var url = "<%=request.getContextPath()%>/servlet/AjaxServer?id=" + escape(idField.value);
alert("URL : "+url);
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
alert("Out Validate");
}
function callback() {
if (req.readyState == 4) {
if (req.status == 200) {
var message = req.responseXML.getElementsByTagName("message")[0];
setMessage(message.childNodes[0].nodeValue);
}
}
}
function setMessage(message) {
mdiv = document.getElementById("userIdMessage");
if (message == "invalid") {
mdiv.innerHTML = "<div style=\"color:red\">Invalid User Id<>";
} else {
mdiv.innerHTML = "<div style=\"color:green\">Valid User Id<>";
}
}
</script>
</HEAD>
<BODY>
<FORM>
<table border=0>
<tr>
<td><input type="text" size="20" id="userid" name="id"></td>
<td><input type="button" value="check" id="userButton" onclick="validate();"></td>
<td><div id="userIdMessage"></div></td>
</tr>
</table>
</FORM>
</BODY>
</HTML>
Hi,
Why don't U try wid this...
change
var url = "<%=request.getContextPath()%>/servlet/AjaxServer?id=" + escape(idField.value);
to this...
var url = "<SERVELET_PATH_CONFIGURED_@_WEB.XML>?id=" + escape(idField.value);
so change the validate function in your script to something similar to the one below...(here i've made an assuption that the Servlet is being registered under the same web application)
var req
function validate() {
alert("In Validate") ;
var idField = document.getElementById("userid");
var url = /servlet/AjaxServer?id=" + escape(idField.value);
alert("URL : "+url);
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req == null){
alert("Browser cannot support XmlHttpRequest");
return;
} else{
req.onreadystatechange = callback;
req.open("GET", url, true);
req.send(null);
}
}
Hope this might help :)
REGARDS,
RaHuL