Foros del Web » Programando para Internet » Javascript »

Problema con Array()

Estas en el tema de Problema con Array() en el foro de Javascript en Foros del Web. Hola, resulta que estoy tratando de utilizar Arrays para almacenar un conjunto de respuestas que envío desde el server a mi página. En cuento corto, ...
  #1 (permalink)  
Antiguo 14/03/2009, 12:08
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 1 mes
Puntos: 1
Problema con Array()

Hola, resulta que estoy tratando de utilizar Arrays para almacenar un conjunto de respuestas que envío desde el server a mi página.

En cuento corto, estoy utilizando la librería YUI y sus funcionalidades con ajax incorporado.

La idea es que en el js pesco la respuesta del servidor, la cual tiene la siguiente forma (en php):

Código:
'Ok<fieldAtribute>ProjectMaterialReportId<value>'.$itemReports[$i]->getProjectMaterialReportId().'<fieldAtribute>ItemId<value>'.$itemReports[$i]->getItemId().'<fieldAtribute>ProjectId<value>'.$itemReports[$i]->getProjectId().'<fieldAtribute>ItemName<value>'.$itemObj[0]->getItemName().'<fieldAtribute>Quantity<value>'.$itemReports[$i]->getQuantity().'<fieldAtribute>Outprice<value>'.$itemObj[0]->getOutprice().'<fieldAtribute>Inprice<value>'.$itemObj[0]->getInprice().'<fieldAtribute>Datecreated<value>'.formatDate($itemReports[$i]->getDateCreated()).'<fieldAtribute>Delete<value>0';

Lo que está después de "<value>" son variables que tienen valores y que se leen en el js".

Ese código corresponde a un echo de un solo registro, pero pueden ser muchos, para ello, después de tal echo añado un echo "<newRegistry>"
La cosa es que en el js tendría una cadena bastante larga con datos, de la siguiente forma:

Código:
Ok<fieldAtribute>KEY1<value>VALOR1<fieldAtribute>KEY2<value>VALOR2<fieldAtribute>KEY3<value>VALOR3.........<fieldAtribute>KEYN<value>VALORN<newRegitry>Ok<fieldAtribute>KEY1<value>VALOR1<fieldAtribute>KEY2<value>VALOR2<fieldAtribute>KEY3<value>VALOR3.........<fieldAtribute>KEYN<value>VALORN<newRegitry>Ok<fieldAtribute>KEY1<value>VALOR1<fieldAtribute>KEY2<value>VALOR2<fieldAtribute>KEY3<value>VALOR3.........<fieldAtribute>KEYN<value>VALORN<newRegitry>Ok<fieldAtribute>KEY1<value>VALOR1<fieldAtribute>KEY2<value>VALOR2<fieldAtribute>KEY3<value>VALOR3.........<fieldAtribute>KEYN<value>VALORN<newRegitry>Ok<fieldAtribute>KEY1<value>VALOR1<fieldAtribute>KEY2<value>VALOR2<fieldAtribute>KEY3<value>VALOR3.........<fieldAtribute>KEYN<value>VALORN<newRegitry>Ok<fieldAtribute>KEY1<value>VALOR1<fieldAtribute>KEY2<value>VALOR2<fieldAtribute>KEY3<value>VALOR3.........<fieldAtribute>KEYN<value>VALORN

El mensaje lo tomo en el js,y todo bien. El problema es cuando quiero separar todas las variables que me traspaso, a un areglo de 2 dimensiones.

En el js tomo el mensaje de arriba ylo paso a la siguiente funcion:

Código:
<script type="text/javascript">
        var readServerData = function(response){
	var key = "";
	var value = "";
	var dataReg = "";
	var dataResp = "";
	var dataRow = new Array();
	var regRow = new Array();
	dataResp = response.split("<newRegistry>"); //Genero un array con cada registro
	for(var j = 0; j < dataResp.length; j++){
		dataReg = dataResp[j].split("<fieldAtribute>"); //Genero un array con cada dato de cada registro
		dataRow["Result"] = dataReg[0]; // En cada registro, el elemento 0 es una respuesta del servidor (Ok si la consultase ejecutó bien, Fail si es que no)
		if (dataRow["Result"] == "Ok"){
			for(var i = 1; i < dataReg.length; i++){
				key = dataReg[i].split("<value>")[0]; //Antes de <value> está el nombre de la propiedad (KEY1 o KEY2 etc.)
				value = dataReg[i].split("<value>")[1];//Despues de <value> está el nombre del valor de la propiedad (VALOR1 o VALOR2 etc.)
				dataRow[key] = value;
			}
			regRow[j] = new Array();
			regRow[j] = dataRow; //ACÁ TENGO EL DRAMA
		}
		else{
			break;
		}
	}
	return regRow;
}
<script>
Resulta que cuando hago regRow[j] = dataRow, dataRow es un arreglo de la siguiente forma:

dataRow = KEY1:VALOR1, KEY2:VALOR2,.....,KEYN:VALORN

var valorN = dataRow[KEYN]; //por ejemplo

y no funciona la asignación. Hice muchas pruebas y llegue a la conclusión de que regRow[j] obtiene el valor de dataRow, pero lo aplica a cada elemento dentro de él......y más aún, le hago un regRow.length y el valor que me arroja es "undefined" :S

Si alguien está interesado en esto, lo explicaré más detalladamente si es necesario, pero la lógica está buena, lo apliqué una respuesta de 1 solo registro y funciona, pero con varios solo me devuelve varios arregloscon losvalores del ultimo registro obtenido.

Saludos y gracias de antemano.
  #2 (permalink)  
Antiguo 14/03/2009, 12:25
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Problema con Array()

Acaso no se puede anidar un arreglo dentro de otro cuando el arreglo unitario tiene una estructura de tipo diccionario (Nombre de indices definidos por mi y no números consecutivos).
  #3 (permalink)  
Antiguo 14/03/2009, 13:39
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con Array()

En mi modesta opinión, tu problema es que tienes esta línea:

Código javascript:
Ver original
  1. var dataRow = new Array();

fuera del bucle en el que recorres cada fila. PAra cada fila deberías inicilizar dataRow de nuevo.
  #4 (permalink)  
Antiguo 14/03/2009, 15:57
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Problema con Array()

Cita:
Iniciado por venkman Ver Mensaje
En mi modesta opinión, tu problema es que tienes esta línea:

Código javascript:
Ver original
  1. var dataRow = new Array();

fuera del bucle en el que recorres cada fila. PAra cada fila deberías inicilizar dataRow de nuevo.
Mmmm...... probaré eso, aunque estuve imprimiendo losvalores de dataRow y efectivamente leía los nuevos valores, el drama es que el otro arreglo, es decir, dataReg que está formado por dataRows toma el valor, en su totalidad, del ultimo dataRow al que se le hace asignación.

Peeeeeero, ahora que me dices eso, es posible que sea una cosa de punteros......entonces si inicio dataRow en cada bucle, debería arreglarse. Lo probaré y diré si funciona o no.

Gracias por tu respuesta :)
  #5 (permalink)  
Antiguo 14/03/2009, 16:06
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Problema con Array()

Efectivamente eso era, ajajajajaja

Como no inicializaba la variable dentro, obtenia valores para dataRow, pero el arreglo al que le asignaba la variable seguía apuntando a la variable y no a los datos, por ende cada vez que cambiaba dataRow, cambiaban todos los elementos de dataReg.
Excelente, muchas gracias por tu ayuda ajajaja, es dificil cachar esos problemas cuando uno es el que hace el código :)
Saludos!!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:25.