С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript
Войти
Регистрация
Восстановить пароль
 
UProger
12 / 12 / 3
Регистрация: 19.04.2013
Сообщений: 834
1

Мистика в JS

03.06.2014, 11:22. Просмотров 261. Ответов 2
Метки нет (Все метки)

Имеется вызов:

Javascript
1
madad = getParametrFromDB(first_year, first_month, second_year, second_month);
и сама функция:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function getParametrFromDB(first_year, first_month, second_year, second_month)
    {
        var value;
        $.ajax({ 
            url:"php/operations.php", 
            type: 'post',
            data:{ year_one: first_year, month_one: first_month, year_two: second_year, month_two: second_month },
            success:function(result){
                alert("result = " + result);            
                value = result;
            } 
        });
        alert("value = " + value);      
        return value;
    }
Если всё оставить как есть то код работает. если убрать алерты, то возващаемый результат полкчается неопределённым.

что за чертавщина? и как испавить??
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2014, 11:22
Ответы с готовыми решениями:

Мистика
Добрый вечер!Мучаюсь с часу сегодняшнего дня и ничего не понимаю как так...

Мистика
Небольшая, простая офисная сеть. "Главный" компьютер, самый мощный - шлюз с...

Мистика с ip
Народ может кто сталкивался. Работаю у местного провайдера. Фишка в чем клиент...

Мистика в Qt
Привет. Необходимо через Вконтакте апи получить список друзей и поместить на...

Мистика?
Здравствуйте. Помогите разобраться со сложившейся ситуацией: в AVR Studyo...

2
mihalken
95 / 95 / 74
Регистрация: 15.05.2014
Сообщений: 269
Записей в блоге: 2
03.06.2014, 11:30 2
Как бы изначально Неопределенно
Javascript
1
 var value;
Вы не дождались ответа в ajax и вернули начальное значение. Ajax запустился и алгоритм пошел дальше, а что дальше? return. Алерты держали клиента и соответственно ajax выполнился.

Следовало бы сделать так:
Javascript
1
2
3
4
success:function(result){
    return result;
}
// другие обработки (failed, etc.) с return
?
0
Razip
267 / 267 / 109
Регистрация: 22.08.2013
Сообщений: 905
03.06.2014, 12:53 3
mihalken, а Вы не думали что return просто прервет выполнение анонимной функции success, переданной в метод $.ajax()?

Мой рабочий вариант:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    function getDataFromDB(firstYear, firstMonth, secondYear, secondMonth) {
        var responseData = '';
 
        $.ajax({
            url: '/test.php',
            type: 'post',
            async: false,
            data: {
                firstYear: firstYear,
                firstMonth: firstMonth,
                secondYear: secondYear,
                secondMonth: secondMonth
            },
            success: (function () {
                return function (result) {
                    responseData = result;
                };
            })()
        });
 
        return responseData;
    }
 
    console.log(getDataFromDB(12, 5, 32, 4));
Ваш вариант, рабочий:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function getParametrFromDB(first_year, first_month, second_year, second_month)
    {
        var value;
        $.ajax({ 
            url:"php/operations.php", 
            type: 'post',
            async: false,
            data:{ year_one: first_year, month_one: first_month, year_two: second_year, month_two: second_month },
            success: (function () {
                return function (result) {
                    value = result;
                };
            })()
        });
 
        return value;
    }
Объясняю принцип работы:

1) Запрос выполняется синхронно благодаря свойству async и значению false.
2) В success стоит функция, которая самоинициализурется и возвращает другую функцию, которая установит значение в переменную value (в ту область видимости функции, откуда был сделан вызов $.ajax()), когда придут данные.

Если бы я не сделал самоинициализирующуюся функцию, то ответ сервера бы устанавливался либо в window.value (глобальная переменная value), либо в текущую область видимости и т.д. (где-то в недрах jQuery).
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2014, 12:53

Мистика
Мистика

Мистика)
Привет всем.Такая проблема: У меня есть форма,допустим Form1 Когда ее...

Мистика
Здравствуйте! Такая непонятная штука у меня получается...есть сайт...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru