Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/02/2013, 15:49
elpropiopato23
 
Fecha de Ingreso: octubre-2011
Ubicación: Niquitao
Mensajes: 28
Antigüedad: 12 años, 6 meses
Puntos: 0
No reconoce una variable una respuesta JSON

Hola Amigos de Foros del Web, un gran saludos a todos y de antemano les agradezco cualquier ayuda que me puedan dar.

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:

<script type="text/javascript">
$(function(){
$('#item_select_1').change(function(){
var ajax = $.ajax({
type: "GET",
url: "/ad/getmodelos/id/" + $(this).val(),
async: true,
dataType: "json",
beforeSend: function(x) {
if(x && x.overrideMimeType) {
x.overrideMimeType("application/j-son;charset=UTF-8");
}
},
success: function(data){
var options = '';
for (var i = 0; i < data.length; i++) {
options += '<option value="' + data[i].id_modelo + '">' + data[i].nombre_modelo + '</option>';
}
$('#item_select_2').html(options);
}
});
});
})();
</script>

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:

LoadSelect = function (data) {
id = data.atributs['id'];
name = data.atributs['name'];
$.ajax({
url: data.url,
type: data.type,
data: data.data,
async: true,
dataType: data.data['format'],
beforeSend: function(x) {
if(x && x.overrideMimeType) {
x.overrideMimeType("application/j-son;charset=UTF-8");
}
},
success: function(data){
var options = '';
for (var i = 0; i < data.length; i++) {
options += '<option value="' + data[i].id + '">' + data[i].name + '</option>';
}
$('#'+id).html(options);

}
});
},

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

$('#idcollection').bind('change',function () {
$("#idubication option:first").text("Loading ...");
LoadSelect({
url : '/'+$lang+'/library/material/pruebaubication/',
type : 'GET',
data : {'format':'json','ubicationid':$(this).val()},
atributs : {'id':"idubication",'name':"name"},
element : $('#idcollection option:selected').val()
});
});

Si observamos en el ciclo de la respuesta JSON

la linea esta así y no me funciona pues no reonoce la variable id
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 respeuesta 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.

options += '<option value="' + data[i].idubication + '">' + data[i].name + '</option>';

<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; 28/02/2013 a las 16:45