使用jQuery each()函数返回一个值

时间:2011-08-04 13:12:47

标签: javascript jquery arrays json

我是javascript的新手,我想从JSON中检索值并将其推入数组,以便我可以在另一个函数中再次解析此数组,但我不知道如何在推送后返回数组里面的元素。

在以下脚本中,我无法在项目中显示值

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

我怎样才能访问该阵列?

谢谢!

2 个答案:

答案 0 :(得分: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);
}
当AJAX调用完成时,将调用

processData。这不能将值返回给另一个函数,因此所有逻辑都必须在此回调函数中。

更新:您还可以将回调函数传递给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 :(得分: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]);
    });
}