2011-08-04 9 views
6

मैं जावास्क्रिप्ट के लिए नया हूं, और मैं 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 ही कहा जाता है। यह किसी अन्य फ़ंक्शन पर कोई मान नहीं लौटा सकता है, इसलिए आपके सभी तर्क इस कॉलबैक फ़ंक्शन के अंदर होना चाहिए।

अद्यतन: आप कॉलबैक फ़ंक्शन में 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

बेशक तुम इतनी है कि आप एक कॉलबैक फ़ंक्शन में पारित कर सकते हैं यदि आप सरणी के साथ अलग अलग बातें करने की ज़रूरत है जी सी के लिए एक अतिरिक्त पैरामीटर जोड़ सकते हैं विभिन्न स्थानों में। – alnorth29

+0

आपके उत्तर के लिए धन्यवाद, लेकिन समस्या एक ही है, फिर मैं प्रक्रिया डेटा से मूल्य कैसे वापस कर सकता हूं? क्योंकि एक बार जब मैंने जेएसओएन ऑब्जेक्ट को पार्स किया है, तो मैं पृष्ठ के गणना वाले तत्वों की श्रेणी को टॉगल करता हूं (उन्हें पार्स करके) और मुझे प्रत्येक toggled तत्व –

+1

@ जेरेक पर मान सेट करने के लिए प्रक्रिया डेटा() परिणाम को दोबारा करना होगा: आपको अपना परिवर्तन करने की आवश्यकता है तर्क। आप कुछ भी वापस नहीं कर सकते हैं। आपको कॉलबैक फ़ंक्शन के अंदर कक्षाओं को टॉगल करना होगा। –

संबंधित मुद्दे