2011-08-04 111 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:你需要改变你的逻辑。你不能回报任何东西。你必须切换回调函数中的类。 –