2009-08-30 12 views
58
var list = []; 
$.getJSON("json.js", function(data) { 
    $.each(data, function(i, item) { 
     console.log(item.text); 
     list.push(item.text); 
    }); 
}); 
console.log(list.length); 

list.length हमेशा 0 देता है। मैंने JSON को फायरबग में ब्राउज़ किया है और यह अच्छी तरह से गठित है और सब कुछ ठीक दिखता है। मैं सरणी में एक आइटम जोड़ने के लिए प्रतीत नहीं कर सकता मैं क्या याद कर रहा हूँ?मैं jQuery में किसी सरणी में आइटम कैसे जोड़ूं?

+0

यह सही लगता है। क्या लॉग इन करने के लिए '$ .each' लूप प्रिंट आइटम हैं, लेकिन उन्हें 'सूची' में नहीं जोड़ता है? – Kobi

उत्तर

113

चूंकि $.getJSON async है, मुझे लगता है कि आपकी console.log(list.length); कोड आपके सरणी को पॉप्युलेट करने से पहले फायरिंग कर रहा है। सही करने के लिए यह आपके कॉलबैक के अंदर अपने console.log बयान डाल:

var list = new Array(); 
$.getJSON("json.js", function(data) { 
    $.each(data, function(i, item) { 
     console.log(item.text); 
     list.push(item.text); 
    }); 
    console.log(list.length); 
}); 
3

आप एक ajax अनुरोध जो ajax अनुरोध पूर्ण हो गया इससे पहले कि अतुल्यकालिक इसलिए सूची लंबाई के अपने कंसोल लॉग होता है कर रहे हैं।

आप जो चाहते हैं उसे प्राप्त करने का एकमात्र तरीका अजाक्स कॉल को तुल्यकालिक रूप से बदल रहा है। आप .ajax का उपयोग करके और asynch में गुजरकर ऐसा कर सकते हैं: झूठी हालांकि इसकी अनुशंसा नहीं की जाती है क्योंकि यह कॉल वापस लौटाए जाने तक यूआई को लॉक करता है, अगर यह वापस करने में विफल रहता है तो उपयोगकर्ता को ब्राउज़र से बाहर निकलना पड़ता है।

2

आशा इस तुम्हारी मदद करेगा ..

var list = []; 
    $(document).ready(function() { 
     $('#test').click(function() { 
      var oRows = $('#MainContent_Table1 tr').length; 
      $('#MainContent_Table1 tr').each(function (index) { 
       list.push(this.cells[0].innerHTML); 
      }); 
     }); 
    }); 
संबंधित मुद्दे