jQuery AJAX范围的问题

时间:2011-02-23 00:01:28

标签: javascript jquery

我在尝试从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>

我做错了什么?

1 个答案:

答案 0 :(得分:3)

这是因为在您执行警报时回调还没有完成。

Get请求是异步的,因此即使尚未完成,也会继续执行。因此,当执行alert()语句时,尚未执行成功回调,因此items仍为空。

您可以执行同步通话,也可以包含您在成功回调中尝试执行的任何操作。