Javascript.RU

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

getJSON странно возвращает данные
Есть функция с вызовом getJSON:
function GetData() {
			$.getJSON("dataset.json",function(obj_dat){
				for (var i = 0; i < obj_dat.length; i++) {
					if (obj_dat[i]["type"] == "list") { Lists = obj_dat[i]["list"]; }
					if (obj_dat[i]["type"] == "node") { Nodes = obj_dat[i]["list"]; }
					if (obj_dat[i]["type"] == "elem") { Elems = obj_dat[i]["list"]; }
				}
			$("#optionbar").append("<b>1: "+Lists.length+Nodes.length+Elems.length+"</b><br>");
		});
			$("#optionbar").append("<b>2: "+Lists.length+Nodes.length+Elems.length+"</b><br>");
		};

И есть кусок функции, вызываемой обработчиком:
GetData();
		$("#optionbar").append("<b>3: "+Lists.length+Nodes.length+Elems.length+"</b><br>");


В результате выполнения этого куска, выводится следующее:
Код:
2: 000
3: 000
1: 1113
Вопрос: почему происходит такое? Ведь по идее, должен сначала выполниться кусок с выводом в лог "1: ***", а потом уже 2 и 3.
Ответить с цитированием
  #2 (permalink)  
Старый 23.07.2013, 17:27
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

а можно узресть dataset.json?? хоть чуть-чуть
Ответить с цитированием
  #3 (permalink)  
Старый 23.07.2013, 17:55
Новичок на форуме
Отправить личное сообщение для Sudno Посмотреть профиль Найти все сообщения от Sudno
 
Регистрация: 23.07.2013
Сообщений: 6

Сообщение от skrudjmakdak Посмотреть сообщение
а можно узресть dataset.json?? хоть чуть-чуть
[
	{
		"type": "list",
		"list": [
			{
				"name": "bup_list",
				"rus_name": "Список БУП"
			}
		]
	},
	{
		"type": "node",
		"list": [
			{
				"name": "bup_2011",
				"rus_name": "БУП за 2011",
				"year": 2011,
				"list": "bup_list"
			}
		]
	},
	{
		"type": "elem",
		"list": [
			{
				"name": "bup_1",
				"rus_name": "БУП 1138(2011)",
				"sma": 3870.98,
				"ecc": 2056.30,
				"per": 8796.91,
				"mae": 1747.96,
				"node": "bup_2011"
			},

	...

		]
	}
]
Ответить с цитированием
  #4 (permalink)  
Старый 23.07.2013, 19:14
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

действительно такое наблюдается. когда используешь JSON.parse, то такого нет. Скорей всего сам jquery сам так себя ведет

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<title>1</title>
	</head>
	<body>
		<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
		<script type="text/javascript">
var json = '[{"type": "list","list": [{"name": "bup_list","rus_name": "Список БУП"}]}]';
		
function GetData()
	{
	$.getJSON("dataset.json", function (obj_dat)
		{
		console.log(1);
		});
	console.log(2);
	};
GetData();
		</script>
	</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 23.07.2013, 19:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Sudno,
результат getJSON когда придёт тогда и вставится и это нормально
Ответить с цитированием
  #6 (permalink)  
Старый 23.07.2013, 20:12
Новичок на форуме
Отправить личное сообщение для Sudno Посмотреть профиль Найти все сообщения от Sudno
 
Регистрация: 23.07.2013
Сообщений: 6

Сообщение от рони Посмотреть сообщение
Sudno,
результат getJSON когда придёт тогда и вставится и это нормально
А можно как-нибудь завязать выполнение функции на приход данных?
Ответить с цитированием
  #7 (permalink)  
Старый 23.07.2013, 20:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Sudno,
вам просто надо вставлять 1 перед 2 если 1 формируется динамически -- используйте .prepend()
или .prependTo() или сортируйте перед вставкой или после вставки
Ответить с цитированием
  #8 (permalink)  
Старый 23.07.2013, 21:00
Новичок на форуме
Отправить личное сообщение для Sudno Посмотреть профиль Найти все сообщения от Sudno
 
Регистрация: 23.07.2013
Сообщений: 6

Сообщение от рони Посмотреть сообщение
Sudno,
вам просто надо вставлять 1 перед 2 если 1 формируется динамически -- используйте .prepend()
или .prependTo() или сортируйте перед вставкой или после вставки
Возможно, кто-то что-то не понял. В GetData идет зачитка данных из файла в 3 массива. Проблема как раз в том, что когда появляется необходимость работать с этими массивами (2 и 3 лог), данных в массивах нет - они подгружаются позже (лог 1 идет уже после них).
Ответить с цитированием
  #9 (permalink)  
Старый 23.07.2013, 21:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Sudno,
я вас тоже непонимаю функция что привели в 1 посте -- сначала выполнит 10 строку -- потом неизвестно когда 8 строку - надеюсь это понятно? когда у вас сработает строка ("<b>3 понятия неимею, нет кода.
Ответить с цитированием
  #10 (permalink)  
Старый 23.07.2013, 21:22
Новичок на форуме
Отправить личное сообщение для Sudno Посмотреть профиль Найти все сообщения от Sudno
 
Регистрация: 23.07.2013
Сообщений: 6

рони,
Ну так мне вот надо гарантированно, чтобы 10 была после 8.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
данные полученные getJson Sveta AJAX и COMET 6 31.10.2012 09:27
Данные из REST , ExtJS selections ExtJS 7 17.10.2011 13:02
Как подгрузить данные с чужого домена, XSS-proof? Actine AJAX и COMET 6 03.09.2011 22:08
Аякс не возвращает значение с сервера vamfirius Internet Explorer 0 26.05.2011 23:53
Не совсем обычный фрейм и выезжающий текст при наводе на картинку. amaz245 Элементы интерфейса 35 25.12.2010 17:29