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:
La cosa es que en el js tendría una cadena bastante larga con datos, de la siguiente forma:'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>"
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:
Resulta que cuando hago regRow[j] = dataRow, dataRow es un arreglo de la siguiente forma:<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>
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.