2011-08-04 15 views
6

soy nuevo en javascript, y me gustaría recuperar los valores de JSON y empujarlo en una matriz para que pueda analizar de nuevo esta matriz en otra función, pero no lo hago Saber cómo devolver la matriz después de empujar el elemento dentro de ella.Devolver un valor con jQuery cada() función

En la siguiente secuencia de comandos no puedo mostrar los valores en artículos

function gC(b,c,p) { 

    $.getJSON('getmonths', 'b='+b+'&c='+c+'&p='+p, processJSON);  
} 

function processJSON(data) { 
     var retval = []; 
     $.each(data, function(key, val) { 

      retval.push(val); 
      //alert(retval.pop()); 
     }); 
     return retval; 
} 

    $(document).ready(function(){ 
     var b = $("#b").val(); 
     var c = $("#c").val(); 
     var p = $("#p").val(); 

     var items = []; 

     items = gC(b,c,p); 
     var i = 0; 

     $('td').each(function(index) { 
      $(this).attr('bgcolor', items[i]); 
      i++; 
     } 

¿Cómo podría acceder a la matriz?

gracias!

Respuesta

3

sólo tienen el código dentro de la devolución de llamada:

function processJSON(data) { 
    var retval = []; 
    $.each(data, function(key, val) { 
     retval.push(val); 
    }); 
    $('td').each(function(index) { 
     if (index < retval.length) 
      $(this).attr('bgcolor', retval[index]); 
    }); 
} 
4

No regresa de una llamada AJAX, tiene que llamar a una función de devolución de llamada cuando termina.

function gC(b,c,p) { 
    var retval = []; 
    $.getJSON('getmonths', 'b='+b+'&c='+c+'&p='+p, processData); 
} 

function processData(data){ 
    var retval = []; 
    $.each(data, function(key, val) { 
     retval.push(val); 
     //alert(retval.pop()); 
    }); 
    alert(retval); 
} 

processData se llamaría cuando se realiza la llamada AJAX. Esto no puede devolver un valor a otra función, por lo que toda su lógica debe estar dentro de esta función de devolución de llamada.

ACTUALIZACIÓN: También puede pasar una función de devolución de llamada al gC para que se llame cuando esté listo.

function gC(b,c,p,f) { 
    var retval = []; 
    $.getJSON('getmonths', 'b='+b+'&c='+c+'&p='+p, function(d){ 
     if(typeof f == 'function'){ 
     f(d); 
     } 
    }); 
} 

Entonces llaman gC así:

gC(b,c,p,function(data){ 
    var retval = []; 
    $.each(data, function(key, val) { 
     retval.push(val); 
     //alert(retval.pop()); 
    }); 
    alert(retval); 
}); 

Update2: Vi el código añadido a la pregunta. Esto debe hacerse en la devolución de llamada.

gC(b,c,p,function(data){ 
    var items = []; 
    $.each(data, function(key, val) { 
     items.push(val); 
    }); 
    $('td').each(function(index){ // You don't need a separate i variable 
            // you can just use the index from the loop 
     $(this).attr('bgcolor', items[index]); 
    } 
}) 
+1

Por supuesto, se podría añadir un parámetro adicional para gC por lo que puede pasar en una función de devolución de llamada si necesita hacer cosas diferentes con la matriz en diferentes lugares. – alnorth29

+0

Gracias por su respuesta, pero el problema sigue siendo el mismo, ¿cómo puedo devolver el valor de processData? porque una vez que haya analizado el objeto JSON, alternaré la clase de elementos computados de la página (también los analizaré) y tendré que volver a analizar el resultado de processData() para establecer los valores en cada elemento alternado –

+1

@Jerec: debe modificar su lógica. No puedes devolver nada Tienes que alternar las clases dentro de la función de devolución de llamada. –

Cuestiones relacionadas