2016-08-30 5 views
5

संपादित करें: मैंने बाद में टिप्पणी की अन्य उपयोगकर्ताओं की मदद से इस मुद्दे को समझ लिया है। समस्या यह है कि jQuery.load() का उपयोग करना एक अंतराल समय है। और जैसा कि नीचे बताया गया है, समस्या वैरिएबल देखी गई थी, बस इसके भीतर डेटा नहीं था। नीचे की समस्या का मेरा समाधान jquery's deferred object फ़ंक्शंस का उपयोग करके कोड को थोड़ा समायोजित कर रहा था।j JSery.each() फ़ंक्शन के बाहर मेरा जेएस चर क्यों नहीं देखा जा रहा है?

$.ajax({ 
    url: 'koc-click-tracker-loader.php', 
    data: {url: 'ar'}, 
    dataType: 'html', 
    context: document.body }) 
.done(function(data) { 
    // Same functionality as below 
    }); 

मूल पोस्ट: मैं 7 कॉलम

रैंक के साथ एक HTML तालिका पार्स करने के लिए कोशिश कर रहा हूँ | उपयोगकर्ता नाम | सर्वोच्च सीपीएम | अंतिम 24 घंटे | कुल क्लिक | लिंक बाएं | अंतिम क्लिक

तब मैं प्रत्येक पंक्ति का डेटा JSON ऑब्जेक्ट में डाल रहा हूं। हालांकि, जब मैं .each() लूप के बाहर डेटा तक पहुंचने का प्रयास करता हूं, तो मैं नहीं कर सकता। मेरा चर वैश्विक स्तर पर परिभाषित किया गया है। जब मैं कोशिश करता हूं, डीबगिंग के लिए, चेतावनी (आउटपुट 1 रैंक)।

var output = []; 
$(function(){ 
    var output = []; 
    $("#_BLANK").load("koc-click-tracker-loader.php #ar_content table", { url: 'ar' }, function() { 
     var data = $("#_BLANK table tbody"); i=0; 
     data.find('tr').each(function() { 
      var $td = $(this).find('td'); 

      if (i > 0) { // Skip first iteration, has blank data. 
      output[i] = { 
       Rank: $td.eq(0).text(), 
       User: $td.eq(1).text(), 
       KocID: $td.eq(1).find('a').prop("href"), 
       CPM: $td.eq(2).text(), 
       Last24: $td.eq(3).text(), 
       TotalClick: $td.eq(4).text(), 
       LinksLeft: $td.eq(5).text(), 
       LastClicked: $td.eq(6).text() }; 
       } 
      i++; 
      }); 
     // Will Error here as well. 
     }); 
    alert(output[1].Rank); // Errors here. 
    console.log("output", output); // Shows all the data properly. 
    }); 

गुण अपरिभाषित की 'रैंक' नहीं पढ़ सकता।

फिर से, किसी कारण से, मेरा चर वैश्विक नहीं है। या कुछ ऐसा है जो मुझे jQuery के साथ कुछ याद आ रहा है ...

+1

'चेतावनी (आउटपुट [0] रैंक); 'एक त्रुटि देता है क्योंकि आपका' आउटपुट [0]' तत्व 'अपरिभाषित' है - आप जानबूझकर अपने लूप में इंडेक्स 1 छोड़ते हैं। – nnnnnn

+0

इस मामले में, यह सही है। मेरे हिस्से पर टाइपो। 1 या अधिक अभी भी त्रुटि। –

+0

उस स्थिति में यह [इस सवाल] का एक डुप्लिकेट प्रतीत होता है (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call?noredirect = 1 और lq = 1) और कुछ अन्य। ध्यान दें कि यह आपको नहीं बता रहा है कि 'आउटपुट' अपरिभाषित है, यह आपको बता रहा है कि' आउटपुट [1] 'अपरिभाषित है। – nnnnnn

उत्तर

1

ऐसा इसलिए है क्योंकि आपका $ .each() फ़ंक्शन $ .load() फ़ंक्शन के अंदर है।

लोड फ़ंक्शन एक एसिंक कॉल है। आप दौड़ की स्थिति में हैं।

मैं शर्त लगाता हूं कि यदि आप output[i] = { लाइन पर ब्रेक पॉइंट डालते हैं, और alert(output[0].Rank); लाइन पर भी, तो आप पहले अलर्ट दबाएंगे।

+1

यह वास्तव में एक ऐसी स्थिति की भावना में "दौड़ की स्थिति" नहीं है जहां परिणाम का समय अग्रिम में निर्धारित नहीं किया जा सकता है। हम जानते हैं कि '.load() 'कॉलबैक * निश्चित रूप से * अन्य कोड रन के बाद चलाएगा। – nnnnnn

+0

हां, और वह उस ऑब्जेक्ट पर एक विशेषता तक पहुंचने का प्रयास कर रहा है जो अभी तक मौजूद नहीं है, इसलिए त्रुटि। –

+0

वाह ... इस मुद्दे के लिए बहुत कुछ था तो मुझे एहसास हुआ। –

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