Hola,
Tengo un problema a la hora de recorrer un JSON obtenido por medio de una invocación AJAX a un Servlet Java.
Servlet
Código:
// Recojo el array de Envios de BBDD
Envio[] listaEnvios = DAO.getInstance().obtenEnvios();
response.setContentType("text/html;charset=UTF-8");
String[] stringarray = new String[listaEnvios.length];
String jSONArrayString = null;
ObjectMapper om = new ObjectMapper();
// Convierto cada objeto Envio del array en un JSON
for (int i=0; i<listaEnvios.length; i++)
{
String jsonString = om.writeValueAsString(listaEnvios[i]);
stringarray[i] = jsonString;
}
// Convierto el array de JSONs en un JSON
jSONArrayString = om.writeValueAsString(stringarray);
// Respuesta del Servlet
PrintWriter out = response.getWriter();
out.print(jSONArrayString);
out.close();
Javascript
Código:
var listaEnvios = null;
/*
* Crea un objeto XMLHttpRequest o devuelve false si
* el navegador no lo soporta.
*/
function getXMLHttpRequest() {
var xmlHttpReq;
// Creación de un objeto XMLHttpRequest en navegadores que no son de Microsoft
if (window.XMLHttpRequest) {
xmlHttpReq = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
// Creación de un objeto XMLHttpRequest en las últimas versiones de Internet Explorer
xmlHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (exp1) {
try {
// Creación de un objeto XMLHttpRequest en las últimas versiones de Internet Explorer
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (exp2) {
alert("Excepción en getXMLHttpRequest()!");
};
};
}
return xmlHttpReq;
}
/*
* Ejecuta una petición AJAX
*/
function makeRequest(url, params) {
var xmlHttpRequest = getXMLHttpRequest();
xmlHttpRequest.open("POST", url, true);
xmlHttpRequest.onreadystatechange = getReadyStateHandler(xmlHttpRequest);
xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
xmlHttpRequest.send(params);
}
function getReadyStateHandler(xmlHttpRequest) {
// an anonynous function returned
// it listens to the XMLHttpRequest instance
return function() {
if (xmlHttpRequest.readyState == 4) {
if (xmlHttpRequest.status == 200) {
listaEnvios = JSON.parse(xmlHttpRequest.responseText);
muestraEnvios();
} else {
alert("Http error " + xmlHttpRequest.status + ":" + xmlHttpRequest.statusText);
};
};
};
}
/*
* Muestra el listado de envíos
*/
function muestraEnvios() {
// Muestra por consola el array de JSONs formado correctamente
console.log(listaEnvios);
// Muestra por consola el primer JSON
console.log(listaEnvios[0]);
for (var i in listaEnvios)
{
// Muestra undefined
console.log(listaEnvios[i]["id"]);
// Muestra cada elemento de cada JSON del array por consola caracter a caracter
for (var j in listaEnvios[0])
{
console.log(j);
}
};
}
El problema está en que no consigo mostrar los elementos de cada JSON del array a pesar de que éste si parece estar bien formado. Como indico en los comentarios de la función muestraEnvios() del código javascript, el array lo muestra correctamente, así como cada JSON que contiene. Pero si accedo a un elemento, muestra undefined y si intento mostrarlo recorriendo el JSON con un bucle for, lo muestra caracter a caracter como si fuera un simple string.
¿Estoy haciendo mal la conversión en el servlet? Si es así, ¿por qué en la consola javascript veo el array de JSONs y cada JSON?
Agradecería cualquier ayuda.
Muchísimas gracias de antemano
Un saludo