Не выполнять код до ответа
Сегодня возникла такая проблема: необходимо получить таблицу, данные для формирования столбцов приходят либо с сервера, либо с экрана. Получается так, что прежде чем придут данные, формируется таблица.
var my_data=get_my_data(); // по этой ф-ции идёт обращение к серверу и в ответ приходит необходимая информация alert('Этот алерт выполнится раньше, чем запишется информация в переменную my_data'); Что можно сделать, чтобы сначала записалась переменная my_data ? |
Ничего. Делается это так:
function get_my_data(callback){ // по этой ф-ции идёт обращение к серверу обращение.onsuccess = function(результат){ var my_data = результат; callback(my_data); } } function first(){ //первая часть кода get_my_data(second) } function second(my_data){ //вторая часть кода } first(); |
Aetae,
Спасибо! Буду знать, что есть такой способ. Правда сделал по-другому, выяснив, что в ексте 3 нельзя указать синхронный метод загрузки. В общем я подключил prototype.js, а там всё элементарно - asynchronous: false |
Синхронные запросы небезосновательно считаются злом. Страница при таком запросе полностью перестаёт отвечать на то время пока идёт загрузка. Пользователей обычно такое поведение бесит.
|
Цитата:
|
Что делать - подождать пока выполнится, не завешивая при этом страницу намертво. Для этого и существуют асинхронные запросы. Зависшие страницы плохо воспринимаются пользователями. У них должна быть возможность передумать и кликнуть на другой раздел например. Таки не понятно, что вы все находите сложного в том, чтобы не писать весь код подряд, а разделить его логически на функции, каждая из которых будет вызвана именно тогда когда надо?
|
Цитата:
|
Часовой пояс GMT +3, время: 20:32. |