I have a function that looks like this:

```
function showCreditCard(idx, data) {

    if(typeof cardInfo == 'undefined' && parseInt($("#cc-dropdown-" + idx + " option:selected").val(),10) > -1) {
       // actual selection made, but not default, so cardInfo hasn't been set. Need to run ajax call to get credit card;
       console.log("show dropdown");
       console.log("there are saved cards and a selection was made");
       poGetPaymentOption('credit card', parseInt($("#cc-dropdown-" + idx + " option:selected").val(),10), idx);

        // this is the default card; display dropdown with default selected and static fields
        console.log("supposedly after poGetPayment");
        console.dir(cardInfo);

        // why is this stuff running before poGetPaymentOtion finishes and returns a cardInfo object?
        if( cardInfo.cc.cc_type == 'VI' ) { $('#cc_visaBig-'+idx).attr('class', 'cc_visaBig'); }

        $('#cc-static-wrap-'+idx).show();
        updateButtonState();

    }

}

```

As you can see by the comments, the lines after the `poGetPaymentOption` call are running before that function is actually complete. I've verified this with logs in the `poGetPaymentOption` function as well (below).

```
function poGetPaymentOption(type, key, bIdx) {
   if( type == 'credit card' ) {
      console.log("signed in, credit card");
      $.post('/site/ajax/customers/getSingleCreditCard',
          { 'key': key },
          function(data) {
            if( data.success == 1 ) {
                console.log("poPayment success");
                    if(typeof cardInfo == 'undefined') {
                        cardInfo = new saveCardInfo(data);
                    }    

            } else {
              console.log("poPayment no success");
            }
          }, 'json');
    } 
}

```

What I would expect to happen is for the call from `showCreditCard` to `poGetPaymentOption` to return success via the ajax call (which it does) and then create a new `saveCardInfo` object called `cardInfo`. It does happen, as far as I can tell, but the lines checking `cardInfo.cc.cc_type` and beyond are all happening before the object is created. I've attached a screenshot of my Firebug console so it's apparent the order things are happening. 

![enter image description here](https://i.stack.imgur.com/A6G5R.png)

What am I doing wrong? I need to make sure that `poGetPaymentOption` is fully complete and `cardInfo` has been created before continuing further in the `showCreditCard` function.