21.08.2014, 18:01
|
Интересующийся
|
|
Регистрация: 07.08.2014
Сообщений: 25
|
|
Не выполнять код до ответа
Сегодня возникла такая проблема: необходимо получить таблицу, данные для формирования столбцов приходят либо с сервера, либо с экрана. Получается так, что прежде чем придут данные, формируется таблица.
var my_data=get_my_data(); // по этой ф-ции идёт обращение к серверу и в ответ приходит необходимая информация
alert('Этот алерт выполнится раньше, чем запишется информация в переменную my_data');
Что можно сделать, чтобы сначала записалась переменная my_data ?
|
|
21.08.2014, 18:35
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
Ничего. Делается это так:
function get_my_data(callback){
// по этой ф-ции идёт обращение к серверу
обращение.onsuccess = function(результат){
var my_data = результат;
callback(my_data);
}
}
function first(){
//первая часть кода
get_my_data(second)
}
function second(my_data){
//вторая часть кода
}
first();
__________________
29375, 35
Последний раз редактировалось Aetae, 21.08.2014 в 18:38.
|
|
22.08.2014, 20:36
|
Интересующийся
|
|
Регистрация: 07.08.2014
Сообщений: 25
|
|
Aetae,
Спасибо! Буду знать, что есть такой способ. Правда сделал по-другому, выяснив, что в ексте 3 нельзя указать синхронный метод загрузки. В общем я подключил prototype.js, а там всё элементарно - asynchronous: false
|
|
25.08.2014, 00:25
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
Синхронные запросы небезосновательно считаются злом. Страница при таком запросе полностью перестаёт отвечать на то время пока идёт загрузка. Пользователей обычно такое поведение бесит.
__________________
29375, 35
|
|
26.08.2014, 19:38
|
Интересующийся
|
|
Регистрация: 07.08.2014
Сообщений: 25
|
|
Сообщение от Aetae
|
Синхронные запросы небезосновательно считаются злом. Страница при таком запросе полностью перестаёт отвечать на то время пока идёт загрузка. Пользователей обычно такое поведение бесит.
|
Да это понятное дело. Но что же поделать, если синхронным запросом я записываю данные во временную таблицу, а затем извлекаю уже записанные данные? Если код будет выполняться дальше, то информация не будет считана, так как insert-то ещё не выполнен! А значит и commit в бд не сработал и т.д. Короче говоря, Восток-дело тонкое)
|
|
26.08.2014, 21:10
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
Что делать - подождать пока выполнится, не завешивая при этом страницу намертво. Для этого и существуют асинхронные запросы. Зависшие страницы плохо воспринимаются пользователями. У них должна быть возможность передумать и кликнуть на другой раздел например. Таки не понятно, что вы все находите сложного в том, чтобы не писать весь код подряд, а разделить его логически на функции, каждая из которых будет вызвана именно тогда когда надо?
__________________
29375, 35
Последний раз редактировалось Aetae, 26.08.2014 в 21:13.
|
|
27.08.2014, 20:03
|
Интересующийся
|
|
Регистрация: 07.08.2014
Сообщений: 25
|
|
Сообщение от Aetae
|
У них должна быть возможность передумать и кликнуть на другой раздел например. Таки не понятно, что вы все находите сложного в том, чтобы не писать весь код подряд, а разделить его логически на функции, каждая из которых будет вызвана именно тогда когда надо?
|
При входе в задачу пользователи выбирают условия формирования, по ним данные записываются во временную таблицу, затем из неё выбираются неповторяющиеся атрибуты - цеха - которые будут являться столбцами (то есть переменное число столбцов). Для того, чтобы узнать количество стобцов, чтобы не шла дальнейшая загрузка кода, ибо пока неизвестно какую таблицу строить, я и хочу использовать синхронный запрос! В данном случае использование множества функций возможно, но нецелесообразно, ибо обращений к серверу в процесс е загрузки, подобных описанному, много. Но ваш способ мне понравился и впредь буду стараться его использовать.
|
|
|
|