Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Непонятки с областью видимости переменной (https://javascript.ru/forum/misc/16696-neponyatki-s-oblastyu-vidimosti-peremennojj.html)

zeleniy 18.04.2011 11:40

Непонятки с областью видимости переменной
 
Есть вот такой код, на jQuery:
function loadModelList(vendor_id) {

    var model;
    $.post("/search/get_models", {vendor_id: vendor_id}, function(data) {
        $(data).each(function() {

            if (params_array['model'] != undefined && params_array['model'] == this.id) {
                model = this.model_name;
            }
        });
    }, 'json');

    alert(model);
}

В самой глубине этого кода должна инициализироваться пременная model. Однако ничего подобного не происходит и её значение так и остаётся undefined. Почему ?? И как сделать так, чтобы я мог получить то что мне надо во внешней области видимости ?

Matre 18.04.2011 12:29

Использовать синхронный запрос.

zeleniy 18.04.2011 12:46

Что значит синхронный ? И почему переменная то не инициализируется ?

Kolyaj 18.04.2011 13:13

Она инициализируется, но позже.

zeleniy 18.04.2011 13:24

А почему позже ? Разве асинхронность запроса влияет на порядок выполнения js-кода ? Запрос то может быть и асинхронный (хотя это всего лишь название, никакого смысла в этой асинхронности кажется нет, кроме того, что текущая страница браузера не перегружается), но код то последовательно должен выполняться..?

Matre 18.04.2011 13:39

zeleniy, alert вызывается сразу, а переменной присваивается значение после запроса.

Kolyaj 18.04.2011 13:53

Цитата:

Сообщение от zeleniy
хотя это всего лишь название, никакого смысла в этой асинхронности кажется нет, кроме того, что текущая страница браузера не перегружается

Вам не правильно кажется.

zeleniy 18.04.2011 16:08

Да, сделал запрос синхронным и всё заработало. Почитал про синхронность/асинхронность http://xmlhttprequest.ru/#use. Спасибо.


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