2011-08-04 51 views
6

我是新來的JavaScript,我想從JSON中檢索值並將其推入數組,以便我可以在另一個函數中再次解析此數組,但是我不'不知道如何在推入元素後返回數組。用jQuery返回值每個()函數

在下面的腳本,我不能顯示的項目

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

值我如何可以訪問陣列?

謝謝!

回答

3

只要有回調中的代碼:

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

您不會從AJAX調用中返回,您可以在完成後調用回調函數。

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將在AJAX調用完成時被調用。這不能將值返回給另一個函數,因此您的所有邏輯必須位於此回調函數內。

更新:您也可以將回調函數傳遞給gC以在完成時調用。

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

然後調用gC像這樣:

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

UPDATE2:我看到你加入到這個問題的代碼。這需要在回調中完成。

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

當然,你可以添加一個額外的參數,以GC,這樣就可以在回調函數傳遞,如果你需要做不同的事情與陣列在不同的地方。 – alnorth29

+0

謝謝您的回覆,但問題仍然如此,那麼我如何才能從processData中返回值?因爲一旦我解析了JSON對象,我就切換了頁面的計算元素的類(通過解析它們),並且我必須重新分析processData()結果來設置每個切換元素的值 –

+1

@Jerec:你需要改變你的邏輯。你不能回報任何東西。你必須切換回調函數中的類。 –