У меня есть пара функций, которые используют вызов jQuery AJAX для извлечения XML-файла с моего сервера и преобразования его в нечто полезное. Посмотрите на следующий код:JavaScript/jQuery AJAX - получение моих асинхронных данных обратно в мою синхронную программу
getBalanceXML: function (callback) {
$.ajax({
type: 'GET',
url: 'Content/saldotracking.xml',
dataType: 'xml',
success: callback,
error: function() { throw new Exception("getBalanceXML(): Failed to load XML file"); }
})
},
getBalanceBarChart: function (xml) {
var balanceArray = [];
$(xml).find('Balance').each(function() {
var nodeObject = {
//fill a JavaScript object with values from the XML file in the format I need
}
balanceArray.push(nodeObject);
});
console.log(balanceArray);
return balanceArray;
}
Теперь, когда я называю эту функцию:
var stuff = getBalanceXML(getBalanceBarChart);
alert(typeof(stuff));
материал вар еще не определено. Следуя другим ответам на StackOverflow, я передаю функцию getBalanceChart в качестве параметра функции getBalanceXML, которая выполняет вызов AJAX. Успех! Теперь getBalanceChart может также использовать XML-файл, полученный от вызова AJAX. Однако все, что я сделал, это переместить проблему синхронизации в другую функцию. Наступает момент, когда синхронной части моей программы нужен массив, который поступает из асинхронной функции.
Что мне делать?
Читать эту тему: http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call – epascarello
Вы не можете. Это совершенно невозможно. Если вы используете асинхронные данные, вся ваша программа становится асинхронной. – Bergi