Форум программистов, компьютерный форум, киберфорум
JavaScript: API
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 31.03.2015
Сообщений: 41

Вернуть значение с анонимной функции

23.08.2016, 08:50. Показов 1283. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, вот только недавно начал изучать JS, начал писать небольшой сайт с использованием jQuery.
Проблема состоит в том, что я не могу вернуть значения с функции, которая обрабатывает GET/POST запрос.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function loadCities(country_id)
{
    var cities = new Array();
 
    $.getJSON('http://cities/sys/php/api.php?method=cities.get&country_id=' + country_id, function(data) 
    {
        for (var i = 0; i < data.cities.length; i++)
        {
            cities[i] = data.cities[i].name;
        }
    });
    
    return cities; // пустой массив :(
}
На выходе все равно массив пустой.
Понимаю, что проблема пустяковая.
Как я только не писал, что я только не делал, и возвращал прям оттуда - не получается.
Понимаю, что где-то что-то не так делаю, но что? Читал про какие-то замыкания, но оно мне и не помогло.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.08.2016, 08:50
Ответы с готовыми решениями:

Вернуть значение локальной переменной анонимной функции
Как получить значение x, не делая его глобальной переменной (не менять место его объявления) ? elem.onclick = function() { var...

Запуск анонимной функции
Hi all! Что можно сделать если есть функция $(window).load(function(){//тут какая-то логика я работаю с аяксом и мне...

Вызов в анонимной функции
Подскажите пожалуйста почему _render вызывается внутри анонимной функции в setInterval? function Clock(options) { this._template =...

5
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
23.08.2016, 09:47
Yurko_UA, Данный аякс запрос работает асинхронно, остальной js код продолжает работу, не дожидаясь ответа. Переменная cities не успевает измениться. Есть 2 варианта. Это выполнять все нужные действия с ответом внутри call-back функции, либо отключать асинхронизацию, в таком случае выполнение js скрипта будет останавливаться, и дожидаться ответа, на это время пользователь не сможет взаимодействовать со страницой.
0
0 / 0 / 0
Регистрация: 31.03.2015
Сообщений: 41
23.08.2016, 10:13  [ТС]
sad67man, а я совсем и не подумал про асинхрон. Можете представить код первого варианта, так как я еще не все понятия в JS понял.

JavaScript
1
2
3
4
5
6
7
8
9
10
$.getJSON('http://cities/sys/php/api.php?method=cities.get&country_id=' + country_id, function(data) 
    {
        for (var i = 0; i < data.cities.length; i++)
        {
            cities[i] = data.cities[i].name;
        }
 
        return cities;
        //return data.cities; - ни так, ни так, тоже не работало
    });
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
23.08.2016, 11:50
Yurko_UA, В общем если нужно вернуть в return функции, то единственный способ, это отключить асинхронизацию.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function loadCities(country_id)
{
    var cities = new Array();
    $.ajax({
        dataType:"json", 
        async:false,
        url: 'http://cities/sys/php/api.php?method=cities.get&country_id=' + country_id,
        success: function(data){
            for (var i = 0; i < data.cities.length; i++)
            {
                cities[i] = data.cities[i].name;
            }
        }
    })
    return cities;
}
1
0 / 0 / 0
Регистрация: 31.03.2015
Сообщений: 41
23.08.2016, 12:07  [ТС]
sad67man, Спасибо!
А если не хочется отключать асихронизацию, то будет ли разумным, например, прям с той функции размещать ответ на DOM?
Говнокод же тоже не хочется писать.
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
23.08.2016, 12:22
Yurko_UA, Так все и делают.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.08.2016, 12:22
Помогаю со студенческими работами здесь

Как передать анонимной функции значение?
Ребята, подскажите, пожалуйста, как сделать, чтобы по нажатию на кнопку &quot;send&quot; в поле messagesBox записывались введенные пользователем...

Как в функции вернуть значение, а потом продолжить работу этой функции?
Есть функция main, которая возвращает определенное значение. Это значение должно вернутся в течении 1.5 секунд. Проблема в том, что в этой...

Вернуть значение из функции
Приветсвую программисты! Такая проблема, надо возвратить m из функции, а оно возвращает не то что надо вообще 2 ошибки: вот основной...

Вернуть значение рекурсивной функции
Доброго времени суток! function calc($a,$b){ if ($a==0){ echo &quot;inkrement&lt;br&gt;&quot;; $res = $res + 1; } else{ for...

Как из функции вернуть значение
Есть код, нужно сделать так, чтобы в подпрограмме не было append'ов, т.е функция должна только считать значение и возвращать в основную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru