Ваш ajax-вызов асинхронный.Когда вы вызываете его, он просто запускает его выполнение, а остальная часть вашего кода продолжает выполняться.Ajax еще не завершен, когда срабатывает ваше оповещение, и он не завершен, пока не будет вызвана функция обработчика успеха.Единственное место, где вы можете знать, что вызов ajax завершен, находится в самом обработчике успеха.Фактически все, что вы хотите сделать с возвращаемыми данными ajax, должно инициироваться из обработчика успеха, а не из кода, который выполняется после того, как вы вызвали вызов ajax.
Если вы переместите строку:
alert( $locations.toSource() );
до конца функции обработчика успеха, тогда вы увидите ваши данные.Только тогда вызов ajax фактически завершен.
Попробуйте это так:
var $locations = [];
/*$obj = {};
$obj['test'] = 'working';
$locations.push($obj);*/
$.ajax({
type: "POST",
url: "/locations/845/data.xml",
dataType: "xml",
success: function($xml){
$($xml).find('node').each(
function(){
$location = {};
//alert( $(this).attr('Latitude') );
$location['latitude'] = $(this).attr('Latitude');
$location['longitude'] = $(this).attr('Longitude');
$location['city'] = $(this).attr('City');
$location['street'] = $(this).attr('Street');
//alert( $location.toSource() );
//alert( $location['latitude'] );
$locations.push($location);
}
);
alert( $locations.toSource() );
}
});