我在尝试从success
回调中修改全局变量时遇到jQuery问题:
<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>
我做错了什么?
答案 0 :(得分:3)
这是因为在您执行警报时回调还没有完成。
Get请求是异步的,因此即使尚未完成,也会继续执行。因此,当执行alert()
语句时,尚未执行成功回调,因此items
仍为空。
您可以执行同步通话,也可以包含您在成功回调中尝试执行的任何操作。