2011-08-04 34 views
6

javascript'te yeni ve JSON'dan değerler almak istiyorum ve bu diziyi başka bir işlevde yeniden ayrıştırabilmem için bir diziye aktarıyorum. İçindeki elemanı ittikten sonra diziyi nasıl döndüreceğini bilmek. Ben dizi erişebilir nasıl Aşağıdaki komut dosyasındakijQuery each() işleviyle bir değer döndürme

Ben öğeler

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

değerleri gösteremez?

Teşekkür ederiz!

cevap

3

Sadece callback'inde içindeki kod var: Eğer dizi farklı şeyler yapmak gerekirse bir geri arama işlevi geçebilir böylece gC ekstra parametresi ekleyebilirsiniz Tabii

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

Bir AJAX çağrısından geri dönmüyorsanız, bittiğinde geri arama işlevini çağırırsınız. AJAX çağrı yapıldığında

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 denilen olacaktır. Bu, başka bir işleve bir değer veremez, bu nedenle tüm mantığınız bu geriçağırım işlevinin içinde olmalıdır.

GÜNCELLEME: Ayrıca, bittiğinde çağrılacak bir geri arama işlevini gC'a iletebilirsiniz.

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

Sonra şöyle gC diyoruz:

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

Update2: Sana soruya eklenen kod gördü. Bunun geri aramada yapılması gerekiyor.

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

farklı yerlerde. – alnorth29

+0

Cevabınız için teşekkür ederiz, ancak sorun aynı kalıyor, daha sonra processData'dan nasıl değer döndürebilirim? çünkü JSON nesnesini ayrıştırdığımda, sayfanın hesaplanan öğelerini (ayrıca bunları ayrıştırarak) değiştiririm ve her değiştirilmiş öğede –

+1

@Jerec değerini ayarlamak için processData() sonucunu yeniden değiştirmem gerekir: mantık. Hiçbir şey geri veremezsin. Sınıfları geri arama işlevinde değiştirmelisiniz. –

İlgili konular