2010-02-03 28 views
12

TheObject = {jQuery AJAX सफलता फ़ंक्शन से सरणी कैसे ठीक से करें?

getArray: function(){ 
     var groups = new Array; 
     $.ajax({ 
       type: "POST", 
       url: "link.php", 
       success: function (data){ 
        var counter = 0; 
        $('g',data).each(function(){  
         var group_name = $(this).find("name").text(); 
         var group_id = $(this).find("id").text(); 
         var group = { 
         id: group_id, 
         name: group_name 
         } 
         groups[counter] = group; 
         counter++; 
        }); 
        return groups; 
       } 
     }); 
    } 

} 

और जब मैं इस विधि कॉल करने का प्रयास करें:

var a = TheObject.getArray(); 
alert(a); 

यह 'अनिर्धारित' रिटर्न। मैं समझ नहीं सकता कि समस्या कहां है। सरणी सफलता समारोह के अंदर बनाई गई है लेकिन मैं इसे ठीक से वापस करने में असमर्थ हूं। आपकी मदद के लिए धन्यवाद!

उत्तर

16

अपने कोड में, आप AJAX कॉल किए जाने के बाद प्रक्रियात्मक कोडिंग का उपयोग कर groups खोज रहे हैं। मुख्य समस्या यह है कि AJAX कॉल पूर्ण होने से पहले आप groups खोज रहे हैं।

एक और समस्या यह है कि आप success() फ़ंक्शन पर समूह लौट रहे हैं, लेकिन TheObject.getArray() फ़ंक्शन कुछ भी नहीं देता है।

तो तुम इस तरह ajax समारोह में कॉलबैक में लाने की जरूरत है: डेविड का उदाहरण के

TheObject = { 
    getArray: function(callback) { 
     var groups = new Array; 
     $.ajax({ 
       type: "POST", 
       url: "link.php", 
       success: function (data){ 
        var counter = 0; 
        $('g',data).each(function(){  
         var group_name = $(this).find("name").text(); 
         var group_id = $(this).find("id").text(); 
         var group = { 
         id: group_id, 
         name: group_name 
         } 
         groups[counter] = group; 
         counter++; 
        }); 
        callback.call(this,groups); 
       } 
     }); 
    } 
} 

TheObject.getArray(function(a) { 
    // this code runs when the ajax call is complete 
    alert(a); 
}); 
+0

धन्यवाद बहुत आदमी! – ecu

0

सरणी पर push का उपयोग करें। इसके अलावा आप समूह नामक एक प्रकार बनाना चाहते हैं और फिर लूप में एक नया समूह बनाना चाहते हैं और फिर इसे सरणी में दबाएं।

+0

कृपया प्रश्न पढ़ें। मुझे सरणी बनाने में कोई समस्या नहीं है। समस्या यह है कि मुझे नहीं पता कि सफलता समारोह के बाहर इसे कैसे प्राप्त किया जाए। – ecu

5

एक बहुत ही सरल संस्करण।

TheObject = { 
    getArray: function(callback) { 
     $.ajax({ 
       cache: true, 
       type: "GET", 
       url: "http://www.domain.com/core/domains.php", 
       success: function (data){ 
        callback.call(this,data); 
       } 
     }); 
    } 
} 

TheObject.getArray(function(data) { 
    javascript: console.log(data);  
}); 
संबंधित मुद्दे