Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/03/2009, 12:08
Lighther
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 10 meses
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.