gjb
gjb

Reputation: 6317

Problem with jQuery AJAX scope

I am having trouble with jQuery with trying to modify a global variable from within the success callback:

<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>

What am I doing wrong?

Upvotes: 1

Views: 414

Answers (1)

Victor
Victor

Reputation: 4721

This is because the callback hasnt finished by the time you are executing the alert.

the Get request is asynchronous so execution continues even if it has not finished. So when the alert() statement executes, the success callback has not yet executed, therefore items is still null.

You can either do a synchronous call, or include whatever you are trying to do inside the success callback.

Upvotes: 3

Related Questions