Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   getJSON странно возвращает данные (https://javascript.ru/forum/misc/40093-getjson-stranno-vozvrashhaet-dannye.html)

Sudno 23.07.2013 17:24

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.

skrudjmakdak 23.07.2013 17:27

а можно узресть dataset.json?? хоть чуть-чуть

Sudno 23.07.2013 17:55

Цитата:

Сообщение от skrudjmakdak (Сообщение 263824)
а можно узресть 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"
			},

	...

		]
	}
]

skrudjmakdak 23.07.2013 19:14

действительно такое наблюдается. когда используешь 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>

рони 23.07.2013 19:18

Sudno,
результат getJSON когда придёт тогда и вставится и это нормально

Sudno 23.07.2013 20:12

Цитата:

Сообщение от рони (Сообщение 263848)
Sudno,
результат getJSON когда придёт тогда и вставится и это нормально

А можно как-нибудь завязать выполнение функции на приход данных?

рони 23.07.2013 20:29

Sudno,
вам просто надо вставлять 1 перед 2 если 1 формируется динамически -- используйте .prepend()
или .prependTo() или сортируйте перед вставкой или после вставки

Sudno 23.07.2013 21:00

Цитата:

Сообщение от рони (Сообщение 263855)
Sudno,
вам просто надо вставлять 1 перед 2 если 1 формируется динамически -- используйте .prepend()
или .prependTo() или сортируйте перед вставкой или после вставки

Возможно, кто-то что-то не понял. В GetData идет зачитка данных из файла в 3 массива. Проблема как раз в том, что когда появляется необходимость работать с этими массивами (2 и 3 лог), данных в массивах нет - они подгружаются позже (лог 1 идет уже после них).

рони 23.07.2013 21:19

Sudno,
я вас тоже непонимаю функция что привели в 1 посте -- сначала выполнит 10 строку -- потом неизвестно когда 8 строку - надеюсь это понятно? когда у вас сработает строка ("<b>3 понятия неимею, нет кода.

Sudno 23.07.2013 21:22

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


Часовой пояс GMT +3, время: 04:19.