Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.08.2014, 18:01
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

Не выполнять код до ответа
Сегодня возникла такая проблема: необходимо получить таблицу, данные для формирования столбцов приходят либо с сервера, либо с экрана. Получается так, что прежде чем придут данные, формируется таблица.

var my_data=get_my_data(); // по этой ф-ции идёт обращение к серверу и в ответ приходит необходимая информация
alert('Этот алерт выполнится раньше, чем запишется информация в переменную my_data');


Что можно сделать, чтобы сначала записалась переменная my_data ?
Ответить с цитированием
  #2 (permalink)  
Старый 21.08.2014, 18:35
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 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.
Ответить с цитированием
  #3 (permalink)  
Старый 22.08.2014, 20:36
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

Aetae,
Спасибо! Буду знать, что есть такой способ. Правда сделал по-другому, выяснив, что в ексте 3 нельзя указать синхронный метод загрузки. В общем я подключил prototype.js, а там всё элементарно - asynchronous: false
Ответить с цитированием
  #4 (permalink)  
Старый 25.08.2014, 00:25
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

Синхронные запросы небезосновательно считаются злом. Страница при таком запросе полностью перестаёт отвечать на то время пока идёт загрузка. Пользователей обычно такое поведение бесит.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 26.08.2014, 19:38
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

Сообщение от Aetae Посмотреть сообщение
Синхронные запросы небезосновательно считаются злом. Страница при таком запросе полностью перестаёт отвечать на то время пока идёт загрузка. Пользователей обычно такое поведение бесит.
Да это понятное дело. Но что же поделать, если синхронным запросом я записываю данные во временную таблицу, а затем извлекаю уже записанные данные? Если код будет выполняться дальше, то информация не будет считана, так как insert-то ещё не выполнен! А значит и commit в бд не сработал и т.д. Короче говоря, Восток-дело тонкое)
Ответить с цитированием
  #6 (permalink)  
Старый 26.08.2014, 21:10
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

Что делать - подождать пока выполнится, не завешивая при этом страницу намертво. Для этого и существуют асинхронные запросы. Зависшие страницы плохо воспринимаются пользователями. У них должна быть возможность передумать и кликнуть на другой раздел например. Таки не понятно, что вы все находите сложного в том, чтобы не писать весь код подряд, а разделить его логически на функции, каждая из которых будет вызвана именно тогда когда надо?
__________________
29375, 35

Последний раз редактировалось Aetae, 26.08.2014 в 21:13.
Ответить с цитированием
  #7 (permalink)  
Старый 27.08.2014, 20:03
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

Сообщение от Aetae Посмотреть сообщение
У них должна быть возможность передумать и кликнуть на другой раздел например. Таки не понятно, что вы все находите сложного в том, чтобы не писать весь код подряд, а разделить его логически на функции, каждая из которых будет вызвана именно тогда когда надо?
При входе в задачу пользователи выбирают условия формирования, по ним данные записываются во временную таблицу, затем из неё выбираются неповторяющиеся атрибуты - цеха - которые будут являться столбцами (то есть переменное число столбцов). Для того, чтобы узнать количество стобцов, чтобы не шла дальнейшая загрузка кода, ибо пока неизвестно какую таблицу строить, я и хочу использовать синхронный запрос! В данном случае использование множества функций возможно, но нецелесообразно, ибо обращений к серверу в процесс е загрузки, подобных описанному, много. Но ваш способ мне понравился и впредь буду стараться его использовать.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется выводить код рекламного блока Adsense из файла JavaScript??? speedflow Элементы интерфейса 0 26.05.2012 15:50
Запуск кода с фрейма, код в родительском окне - КАК ? lamer Javascript под браузер 7 06.05.2012 15:15
Получить код js-скрипта, находящегося в файле на сервере RomanA Общие вопросы Javascript 4 04.04.2012 09:53
Как создать bodyclick код royksopp Общие вопросы Javascript 8 14.10.2011 16:39
ajax, завершение функии до получения ответа Slavenin AJAX и COMET 5 05.12.2010 03:23