2011-08-04 6 views
6

私はJavaScriptには新しく、JSONから値を取得して配列にプッシュして、この配列を別の関数で再度解析できるようにしたいと思いますが、要素を内部に押し込んだ後に配列を返す方法を知っています。次のスクリプトでjQuery each()関数で値を返す

私は、アレイにアクセスできる方法の項目

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

ジャストコールバック内のコードを持って:あなたは、配列と異なることを行う必要がある場合は、コールバック関数に渡すことができるようにあなたがGCに追加のパラメータを追加することができますもちろん

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呼び出しから戻りません。終了したらコールバック関数を呼び出します。 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が呼び出されます。これは別の関数に値を返すことができないので、すべてのロジックはこのコールバック関数の中になければなりません。

更新:コールバック関数を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); 
}); 

アップデート2:私はあなたの質問に追加されたコードを見ました。これはコールバックで行う必要があります。

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

別の場所で。 – alnorth29

+0

返信いただきありがとうございますが、問題は同じですが、どうすればprocessDataから値を返すことができますか?一度JSONオブジェクトを解析すると、ページの計算された要素のクラスを切り替える(解析することによって)ので、processData()の結果を再解析して、トグルされた各要素の値を設定する必要があるからです。 –

+1

@Jerec:論理。何も返すことはできません。コールバック関数内のクラスを切り替える必要があります。 –

関連する問題