I'm new to Ajax and am just starting to learn, I have managed to get data passed to my servlet but once i write back to it and then try to read from it from my web page it returns undefined Here is my code:
Java:
@WebServlet("/PeriodHandler")
public class PeriodHandler extends HttpServlet {
private static Connection conn = UserHandler.conn;
private String periodList;
public String date;
public PeriodHandler(){
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
response.setContentType("text/xml");
System.out.println(request.getParameter("date"));
response.getWriter().println("<responseFromServer>The date is" + request.getParameter("date")+"</responseFromServer>");
}
}
Javascript:
function sendData() {
xmlhttp.open("POST", "PeriodHandler?date=" +document.getElementById('dates').value, true);
xmlhttp.onreadystatechange=recievedMessageFromServer;
xmlhttp.send();
}
function recievedMessageFromServer(){
if(xmlhttp.readyState===4 && xmlhttp.status===200){
var date = xmlhttp.responseXML.documentElement.getElementsByTagName("responseFromServer")[0];
alert(date);
}
}
I hope someone could point me in the right direction, thanks
responseFromServer
is the root element. Try wrapping it inside another and access responseFromServer
//Java
response.getWriter().println("<root><responseFromServer>The date is" + request.getParameter("date")+"</responseFromServer></root>");
//Ajax - No change
var date = xmlhttp.responseXML.documentElement.getElementsByTagName("responseFromServer")[0];
The idea here is when you call xmlhttp.responseXML.documentElement
it starts from the root. So its checks responseFromServer
tag for a child element of responseFromServer
. If you dont want a root you could should remove the documentElement
part like
//Java - No change
response.getWriter().println("<responseFromServer>The date is" + request.getParameter("date")+"</responseFromServer>");
//Ajax
var date = xmlhttp.responseXML.getElementsByTagName("responseFromServer")[0];
Nevermind have found out the problem thanks for Syam S for pointing me in the right direction and for any having the same problem as me, here is the solution.
var date = xmlhttp.responseXML.getElementsByTagName("responseFromServer")[0].childNodes[0].nodeValue;