Задать вопрос
Sovetkali
@Sovetkali
Инженер по тестированию ПО

Почему переменная undefined?

Добрый день.

Есть переменная lang, объявлена в блоке. Присваиваю ей значение в одном функционально блоке, а в другом использую, НО там где ее использую, она undefined. Подскажите пожалуйста, почему?

Вот код:
$('button[id="searchBtn"]').click(function () {
....
var lang;
    $.getJSON(
        'core/lang.php', {
            word: $('input[id="searchInput"]').val()
        },
        function (data) {
            var result = JSON.parse(data);
            lang = result['lang'];
        },
    );
    
        $.get(
            'core/search.php', {
                word: $('input[id="searchInput"]').val(),
                lang: lang
            },
            function (data) {
                result = JSON.parse(data);
                console.log(result);
            },
        )
});
  • Вопрос задан
  • 137 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
megafax
@megafax
web-программист
$('button[id="searchBtn"]').on('click', function () {
	....
	var lang;
	$.getJSON(
		'core/lang.php', {
			word: $('input[id="searchInput"]').val()
		},
		function (data) {
			var result = JSON.parse(data);
			lang = result['lang'];

			$.get(
				'core/search.php', {
					word: $('input[id="searchInput"]').val(),
					lang: lang
				},
				function (data) {
					result = JSON.parse(data);
					console.log(result);
				},
			);
		}
	);
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Запросы асинхронные. Используйте промисы
Ответ написан
Комментировать
EreminD
@EreminD
Кое-что умею
не может быть такого, что ответ с первого запроса еще не пришел (и не обработан), а вы уже шлете второй асинхронный запрос?
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
$.getJSON работает асинхронно, и присвоение lang = result['lang'] произойдет только ПОСЛЕ того как придет ответ с сервера и JSON будет обработан.

Вызов $.get() произойдет намного раньше, когда в переменной lang все еще undefined.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы