Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Variable no es reconocida en Jason

Estas en el tema de Variable no es reconocida en Jason en el foro de Javascript en Foros del Web. Hola Amigos de Foros del Web, un gran saludos a todos y de antemano les agradezco cualquier ayuda que me puedan dar. Este es el ...
  #1 (permalink)  
Antiguo 07/03/2013, 13:34
 
Fecha de Ingreso: octubre-2011
Ubicación: Niquitao
Mensajes: 28
Antigüedad: 12 años, 6 meses
Puntos: 0
Variable no es reconocida en Jason

Hola Amigos de Foros del Web, un gran saludos a todos y de antemano les agradezco cualquier ayuda que me puedan dar.
Este es el mismo tema No reconoce una variable en respuesta JSON, lo repeti porque no encontre la opción Editar pues ya pasarón casi 10 dias de que lo publique.
Muchas gracias a maycolalvarez Colaborador que me especifico que usara la herramienta Highligth,pues no me había fijado que foros del web tiene esta gran herramienta.

Estoy trabajando con PHP MVC en Zend Framework y necesito cargar combobox dependientes de otros, observe este enlace
http://cefaleapersistente.wordpress.com/2012/09/18/select-dependientes-con-zend-framework-y-jquery/

y soluciono mi problema en parte, pues el código que carga el combo 2 con el combo1 es el siguiente en esa página:

Código Javascript:
Ver original
  1. $(function(){
  2.         $('#item_select_1').change(function(){
  3.             var ajax = $.ajax({
  4.                 type: "GET",
  5.                 url: "/ad/getmodelos/id/" + $(this).val(),
  6.                 async: true,
  7.                 dataType: "json",
  8.                 beforeSend: function(x) {
  9.                     if(x && x.overrideMimeType) {
  10.                         x.overrideMimeType("application/j-son;charset=UTF-8");
  11.                     }
  12.                 },
  13.                 success: function(data){
  14.                     var options = '';
  15.                     for (var i = 0; i < data.length; i++) {
  16.                         options += '<option value="' + data[i].id_modelo + '">' + data[i].nombre_modelo + '</option>';
  17.                     }
  18.                     $('#item_select_2').html(options);
  19.                 }
  20.             });
  21.         });
  22.     })();

pero esta función que se plantea en esa página tendría que repetirse en varias ocaciones si ya uno quisiera llenar mas de 2 combobox.
En mi caso necesito llenar al rededor de 7 combobox, por la tanto hice esta misma función pero generica, para reutilizarla las veces que la necesite, pero ya la invocaria con el nombre de los combobox implicados y los campos del combo que se llenara con la respuesta JSON.

Al hacerlo la función generica me quedo de la Siguinete Forma:
Código Javascript:
Ver original
  1. LoadSelect = function (data) {
  2.     id = data.atributs['id'];
  3.     name = data.atributs['name'];
  4.         $.ajax({
  5.             url: data.url,
  6.             type: data.type,
  7.             data: data.data,
  8.             async: true,
  9.             dataType: data.data['format'],
  10.             beforeSend: function(x) {
  11.                 if(x && x.overrideMimeType) {
  12.                     x.overrideMimeType("application/j-son;charset=UTF-8");
  13.                 }
  14.             },
  15.             success: function(data){
  16.                     var options = '';
  17.                     for (var i = 0; i < data.length; i++) {
  18.                         options += '<option value="' + data[i].id + '">' + data[i].name + '</option>';
  19.                     }
  20.                     $('#'+id).html(options);
  21.             }
  22.         });
  23. }

invocaría la función de la Siguiente Forma:

Código Javascript:
Ver original
  1. $('#idcollection').bind('change',function () {
  2.     $("#idubication option:first").text("Loading ...");
  3.     LoadSelect({
  4.         url : '/'+$lang+'/library/material/pruebaubication/',
  5.         type : 'GET',
  6.         data : {'format':'json','ubicationid':$(this).val()},
  7.         atributs : {'id':"idubication",'name':"name"},
  8.         element : $('#idcollection option:selected').val()
  9.     });
  10. });

Si observamos en el ciclo de la respuesta JSON

la linea esta así y no me funciona pues no reonoce la variable id
Código Javascript:
Ver original
  1. options += '<option value="' + data[i].id + '">' + data[i].name + '</option>';

si le doy un alert a la variable option me muestra este resultado
<option value=undefined>Primaria</option><option value=undefined>Psicología</option>

Me muestra este resultado por que el campo name es una clave de los valores que me devuelve la respuesta JSON y así se llama la variable pero si la variable name, la cambio por otro nombre tambien me pondra undefined, pero como la variable id no es igual al valor que me devuelve la respuesta JSON, me pone undefined

Si yo hago esto inmediatamente me da los resultados esperados.
Código Javascript:
Ver original
  1. options += '<option value="' + data[i].idubication + '">' + data[i].name + '</option>';
  2.  
  3. /*Me imprime
  4. <option value="2">Primaria</option><option value="3">Psicología</option>*/

intente con la funcion eval() y no me funciono.

muchas gracias por la ayuda que me puedan dar mil gracias

Última edición por elpropiopato23; 07/03/2013 a las 13:47 Razón: Mala Edición
  #2 (permalink)  
Antiguo 07/03/2013, 16:39
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: Variable no es reconocida en Jason

Podes postear un ejemplo del resultado JSON que obtenes? En un momento usas id_modelo, nombre_modelo y despues otras variables, seguro no le estas errando el nombre?
  #3 (permalink)  
Antiguo 12/03/2013, 11:13
 
Fecha de Ingreso: octubre-2011
Ubicación: Niquitao
Mensajes: 28
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Variable no es reconocida en Jason

Gracias Walter devel no es que haya nombrado las variables mal,
pues en el primer código me refería al código de la página de donde saque el ejemplo, pero los que yo hice fuerón, los del segundo código hacía adelante

en cuanto postear el resultado Json, el me devuelve el siguiente resultado
Código Javascript:
Ver original
  1. [{"idnivel":"12","idsubject":"2","name":"A2.0","insert":"2010-10-25 10:05:49","update":null},{"idnivel":"13","idsubject":"2","name":"B1.0","insert":"2010-10-25 10:05:49","update":null},{"idnivel":"14","idsubject":"2","name":"B2.0","insert":"2010-10-25 10:05:49","update":null}]

igualmente solucione ese problema con el siguiente código, solo modifique el Success
Código Javascript:
Ver original
  1. SigeXhrLoadSelect1 = function (data) {
  2.                   id = data.attribs['id'];
  3.                   name = data.attribs['name'];
  4.                   $.ajax({
  5.                             url: data.url,
  6.                             type: data.type,
  7.                             data: data.data,
  8.                             async: false,
  9.                             dataType:data.data['format'],
  10.                             beforeSend: function(x) {
  11.                                 if(x && x.overrideMimeType) {
  12.                                x.overrideMimeType("application/j-son;charset=UTF-8");
  13.                                 }
  14.                              },
  15.                              success: function(data){
  16.                                         items=data.items;
  17.                                         fields=new Array();
  18.                                         for(var i=0;i<data.fields.length;i++){
  19.                                             fields[i]=data.fields[i];
  20.                                         };
  21.                                         var options = '';
  22.                                         for(var i=0;i<items.length;i++){
  23.                                             for(var j=0;j<fields.length;j++){
  24.                                                 if(fields[j]){
  25.                                                     options += '<option value="' + items[i][id] + '">' + items[i][name] + '</option>';
  26.                                                     j++;
  27.                                                 };
  28.                                             };
  29.                                         };
  30.                                         $('#'+id).html(options);
  31.                               }
  32.                     });
  33.             }

Aunque si soy sincero se que esto se puede optimizar mucho mas. sin tener que utilizar esos 3 ciclos. yo lo único que quiero es optimizar ese código como lo especifique en el
success del ejemplo que yo hice
Código Javascript:
Ver original
  1. success: function(data){
  2.                     var options = '';
  3.                     for (var i = 0; i < data.length; i++) {
  4.                         options += '<option value="' + data[i].id + '">' + data[i].name + '</option>';
  5.                     }
  6.                     $('#'+id).html(options);
  7.             }
solo que no sé que pasa al ponerme undefined en los ID

Mil Gracias walter devel por su ayuda, y si alguien sabe otra respuesta para lo que yo quiero en la optimización de código, lo agradecere mucho

Etiquetas: ajax, campos, funcion, html, jquery, js, php, select, variable
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 20:20.