Reputation: 87
I can't show my XML response
file, I'm using servlets and AJAX. When I click on the submit button, it does not show what I want.
These are my files:
index.jsp
<form action="AjaxServlet" method="post">
Nombre:
<input type="text" name="nombre" id="nombre"/>
<button type="submit" id="enviar" onclick="doCompletion();">
Enviar a Servlet
</button>
</form>
<br>
<div id="objetivo">
</div>
This is my: ajax.js
var req;
var isIE;
function doCompletion() {
//var url = "autocomplete?action=complete&id=";
var nom = document.getElementById("nombre");
var url = "AjaxServlet?nombre=" + escape(nom.value);
req = initRequest();
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
}
function initRequest(){
if (window.XMLHttpRequest) {
if (navigator.userAgent.indexOf('MSIE') !== -1) {
isIE = true;
}
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
isIE = true;
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
function callback() {
if (req.readyState === 4) {
if (req.status === 200) {
myFuncion(req.responseXML);
}
}
}
function myFuncion(responseXML) {
if (responseXML === null) {
return false;
} else {
var personas = responseXML.getElementsByTagName("personas")[0];
var objetivo = document.getElementById("objetivo");
var p = document.createElement("p");
for(count = 0; count < personas.childNodes.length; count++) {
var persona = personas.childNodes[count];
//var persona = personas.getElementsByTagName("persona")[0];
p.appendChild(persona.childNodes[0].nodeValue);
}
objetivo.appendChild(p);
}
}
This is my Servlet
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
String nombre = request.getParameter("nombre");
Date date = new Date();
DateFormat hourFormat = new SimpleDateFormat("HH:mm:ss");
StringBuilder sb = new StringBuilder("");
sb.append("<personas>");
sb.append("<persona>");
//sb.append(nombre).append(", son las: ").append(hourFormat.format(date));
sb.append("Hola");
sb.append("</persona>");
sb.append("</personas>");
response.getWriter().write(sb.toString());
}
And this is what shows on the screen, and I don't know why:
Upvotes: 1
Views: 69
Reputation: 17849
What you need to do is change your form code, because when you hit the button the form's action is performed and not the onclick event of the button. Change it like this:
<form>
Nombre:
<input type="text" name="nombre" id="nombre"/>
<button type="submit" id="enviar" onclick="doCompletion();">Enviar a Servlet</button>
</form>
Or change the button code:
<form action="AjaxServlet" method="post">
Nombre:
<input type="text" name="nombre" id="nombre"/>
<button id="enviar" onclick="doCompletion();">Enviar a Servlet</button>
</form>
UPDATE:
I have simulated your application in a working example with the use of some jQuery (I also did some modifications on your javascript):
index.jsp :
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<script src="http://code.jquery.com/jquery-1.11.3.min.js" type="text/javascript"></script>
<script>
function doCompletion()
{
$.ajax({
type: 'POST',
url: 'AjaxServlet',
data: {
nombre: $('#nombre').val()
},
beforeSend: function () {
},
success: function (data) {
myFuncion(data);
},
error: function () {
alert('error');
}
});
}
function myFuncion(responseXML)
{
var personas = responseXML.getElementsByTagName("personas")[0];
var objetivo = document.getElementById("objetivo");
var p = document.createElement("p");
for(count = 0; count < personas.childNodes.length; count++)
{
var persona = personas.childNodes[count];
p.appendChild(persona);
}
objetivo.appendChild(p);
}
</script>
</head>
<body>
Nombre:<input type="text" name="nombre" id="nombre"/>
<button id="enviar" onclick="doCompletion();">Enviar a Servlet</button>
<br>
<div id="objetivo">
</div>
</body>
</html>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>AjaxServlet</servlet-name>
<servlet-class>AjaxServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AjaxServlet</servlet-name>
<url-pattern>/AjaxServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
Servlet:
public class AjaxServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
String nombre = request.getParameter("nombre");
Date date = new Date();
DateFormat hourFormat = new SimpleDateFormat("HH:mm:ss");
StringBuilder sb = new StringBuilder("");
sb.append("<personas>");
sb.append("<persona>");
//sb.append(nombre).append(", son las: ").append(hourFormat.format(date));
sb.append("["+hourFormat.format(date)+"] Hola "+nombre);
sb.append("</persona>");
sb.append("</personas>");
response.getWriter().write(sb.toString());
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
Output:
Enjoy :)
Upvotes: 2