2011-02-23 114 views
1

我在嘗試修改success回調中的全局變量時遇到了jQuery問題:jQuery AJAX範圍的問題

<html> 
<head> 
<script type="text/javascript" src="javascript/jquery.min.js"></script> 
<script type="text/javascript"> 

    // Define items in the global scope 
    items = null; 

    // Get items from XML for a given category ID 
    function getItems(categoryID) 
    { 
    $.ajax({ 
     type: 'GET', 
     url: 'items.xml', 
     dataType: 'xml', 
     success: function(xml){ 
     items = $(xml).find('category[id="'+categoryID+'"]').children().first(); 
     // This works (returns the name of the first item) 
     alert(items.attr('name')); 
     } 
    }); 
    } 
</script> 
</head> 

<body> 
<script type="text/javascript"> 
    $(function(){ 
    getItems(1); 

    // This doesn't work (returns null) 
    alert(items.attr('name')); 
    }); 
</script> 
</body> 

</html> 

我做錯了什麼?

回答

3

這是因爲在執行警報時,回調沒有完成。

Get請求是異步的,所以即使它還沒有完成,執行也會繼續。所以當alert()語句執行時,成功回調尚未執行,因此items仍爲空。

您可以執行同步調用,也可以包含您在成功回調中嘗試執行的任何操作。

+0

完美答案,謝謝! – gjb 2011-02-23 00:19:50