2011-08-04 19 views
6

Jestem nowicjuszem javascript i chciałbym pobrać wartości z JSON i wepchnąć je do tablicy, aby móc ponownie przeanalizować tę tablicę w innej funkcji, Ale nie wiem. t wiedzieć, jak zwrócić tablicę po wciśnięciu w nią elementu.Zwróć wartość za pomocą funkcji jQuery each()

W poniższym skrypcie nie mogą wyświetlać wartości w pozycji

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++; 
     } 

Jak mogę uzyskać dostęp do tablicy?

dziękuję!

Odpowiedz

3

Wystarczy mieć kod wewnątrz callback:

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

Nie powracasz z połączenia AJAX, ponieważ wywołuje funkcję wywołania zwrotnego po zakończeniu.

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 zostanie wywołany po zakończeniu wywołania AJAX. Nie można zwrócić wartości do innej funkcji, więc cała twoja logika musi znajdować się wewnątrz tej funkcji zwrotnej.

AKTUALIZACJA: Można również przekazać funkcję oddzwonienia do gC, aby ją wywołać.

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

Następnie zadzwonić gC tak:

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

Update2: Widziałem kod dodany do pytania. Należy to zrobić w wywołaniu zwrotnym.

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

Oczywiście można dodać dodatkowy parametr GC tak, że można przekazać w funkcji wywołania zwrotnego, jeśli trzeba robić różne rzeczy z tablicy w różnych miejscach. – alnorth29

+0

Dziękuję za odpowiedź, ale problem pozostaje ten sam, jak mogę następnie zwrócić wartość z processData? ponieważ po przeanalizowaniu obiektu JSON przełączam klasę wyliczonych elementów strony (również je analizując) i muszę ponownie przeanalizować wynik processData(), aby ustawić wartości dla każdego przełączanego elementu: –

+1

@ Jerec: Musisz zmienić swój logika. Nie możesz niczego zwrócić. Musisz przełączać klasy wewnątrz funkcji zwrotnej. –

Powiązane problemy