Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.08.2015, 10:00
Интересующийся
Отправить личное сообщение для abrasum Посмотреть профиль Найти все сообщения от abrasum
 
Регистрация: 23.07.2009
Сообщений: 10

Асинхронные запрос. Преобразования объекта.
Привет, коллеги.
Нужна ваша помощь.
Задача: в js загрузить xml-файл. Из полученного XML парсим данные и создаем некий объект. И далее уже работаем с этим объектом.
Написал такую реализацию:
<script type='application/javascript'>
function textGetFile(file) {
/* Подготавливаем объект с которым потом будем работать */
	var obj = { "title" : "start", "page" : "page start" }; 
	$.get(file,function(answer){
/*
	Типо тут мы получаем содержимое файла xml и по всякому его обрабатываем.
	Но для упрощения я делаю простую имитацию.

*/
		obj.title = "It's work!";
                console.log(obj); /* Объект изменился! */
	},"xml");
/* Возвращаем объект для последующих манипуляций */
	return obj;
}
var result = textGetFile("test.xml");
/* А тут по прежнему не измененный объект :( */
console.log("result: " + result.title + " " + result.page);
</script>


Код не работает! В строке где вывод в консоль - выводится измененый объект как положено. А вот result попрежнему не измененный! Мне кажется это из-за того что запрос асинхронный, что-то типо нескольких потоков и в основном потоке объект obj не меняется а в в потоке запроса файла он меняется.
Подскажите что я не правильно делаю и как мне добится решения моей задачи.
Ответить с цитированием
  #2 (permalink)  
Старый 20.08.2015, 11:21
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

Конечно дело в асинхронности
строка
return obj;
срабатывает раньше получения файла
Ответить с цитированием
  #3 (permalink)  
Старый 20.08.2015, 13:34
Интересующийся
Отправить личное сообщение для abrasum Посмотреть профиль Найти все сообщения от abrasum
 
Регистрация: 23.07.2009
Сообщений: 10

а как тогда решить мою задачу?
Ответить с цитированием
  #4 (permalink)  
Старый 20.08.2015, 14:57
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Сообщение от abrasum
а как тогда решить мою задачу?
Что-то сделать с ответом можно только при его получении. Ни как не раньше... А ты послал запрос и и думаешь, что ответ уже у тебя...

Вот обработчик ответа пусть делает все, что нужно по твоему алгоритму...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Canvas. Как сделать или вообще нельзя? Вращение рандомизированно изменяемого объекта. Zemsky Общие вопросы Javascript 30 19.12.2013 19:44
AJAX запрос в Internet Explorer срабатывает через раз nikolayseo jQuery 5 13.11.2012 00:13
Запрос на сервер Serjuk AJAX и COMET 6 04.06.2012 03:09
Запрос - ответ(VK,json) Slawaq Серверные языки и технологии 4 25.09.2010 00:28
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00