Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.09.2012, 18:07
Аспирант
Отправить личное сообщение для Sergey999 Посмотреть профиль Найти все сообщения от Sergey999
 
Регистрация: 25.12.2011
Сообщений: 75

Ajax и ожидание окончания формирования страницы?
Проблема уже давно была но на первое время сделал на setTimeout, но теперь таймауты стали уж очень длинными, хочу сделать нормально

Делаю 2 Ajax запроса на сервер, вывожу результат на страницу, в одном из них форма. Теперь вешаю элементы на формы события, заполняю форму на основании GET параметров и делаю еще один запрос чтобы вывести результат по умолчанию, но тут есть одна проблема т.е. отправляю туда все что в новой форме

Последний запрос с параметрами формы часто возвращает пустой результат т.к. из за задержек сервера не все процессы выше успевают произойти, как сделать чтобы все это происходило последовательно? Т.е. пока не закончит работу предыдущая функция - новая не начинала свою работы и т.п...?

Пока все лечится увеличением задержки для последнего Ajax запроса, но уже смело можно ставить 1сек что перебор явно, а так то форма не успела даже появиться от первого Ajax запроса, то не успела заполнится, то еще что то...
Ответить с цитированием
  #2 (permalink)  
Старый 24.09.2012, 18:14
Аспирант
Отправить личное сообщение для Sergey999 Посмотреть профиль Найти все сообщения от Sergey999
 
Регистрация: 25.12.2011
Сообщений: 75

Хотя суда по тому что первые два запроса уже асинхронны, то тут бррр, вообще нужно как-то заставить их быть строго последовательными пока первый не закончил - второй никак не должен начинаться
Ответить с цитированием
  #3 (permalink)  
Старый 24.09.2012, 18:30
Аспирант
Отправить личное сообщение для Sergey999 Посмотреть профиль Найти все сообщения от Sergey999
 
Регистрация: 25.12.2011
Сообщений: 75

Блин как же бороться с этой трех этажной асинхронностью...
Ответить с цитированием
  #4 (permalink)  
Старый 24.09.2012, 18:40
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,595

Как все нормальные люди - колбэками.
В чём проблема не понятно совершенно. Приведите пример кода.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 24.09.2012, 18:46
Аспирант
Отправить личное сообщение для Sergey999 Посмотреть профиль Найти все сообщения от Sergey999
 
Регистрация: 25.12.2011
Сообщений: 75

Цитата:
Как все нормальные люди - колбэками.
А можно пример, как это делается?

var jqxhr = $.get(param)
		.success(function(data) {
			// Выполнил первый запрос, получил результат с формой
			document.getElementById('rc').innerHTML = data;
			// Повесил событие
			setTimeout(function(){setupHistoryClicks(document.getElementById('rc'));}, 50);
			// Теперь нужно заполнить форму, еще кое какие мелочи сделать  (но на то что мелочи не влияют)
			setTimeout(function(){extraLoadRC();}, 0);	
		})

		.error(function(xhr, er_type) {
			alert('Ошибка: ' + er_type);
		})

		.complete(function(data) {

	});
	
	
	var jqxhr = $.get(param)
		.success(function(data) {
			// Второй запрос, получил второй набор данных куда буду добавлять данные с запроса из формы
			document.getElementById('lcl').innerHTML = data;
			// Теперь можно отправлять submit от формы и выводить что там есть
			// Вот тут как раз и проблема т.е. либо то что выше не получил форму либо форма не заполнена
			setTimeout(function(){extraLoadLC(param);}, 300);
			// Ну и повешать события для того что получил
			setTimeout(function(){setupHistoryClicks(document.getElementById('lc'));}, 200);			
		})

		.error(function(xhr, er_type) {

		})

		.complete(function(data) {

	});
Ответить с цитированием
  #6 (permalink)  
Старый 24.09.2012, 19:01
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,595

Зачем setTimeout'ы везде напиханы вообще непонятно.

var jqxhr = $.get(param)
        .success(function(data) {
            // Выполнил первый запрос, получил результат с формой
            document.getElementById('rc').innerHTML = data;
            // Повесил событие
            setTimeout(function(){setupHistoryClicks(document.getElementById('rc'));}, 50);
            // Теперь нужно заполнить форму, еще кое какие мелочи сделать  (но на то что мелочи не влияют)
            extraLoadRC();

            var jqxhr = $.get(param)
            .success(function(data) {
                        // Второй запрос, получил второй набор данных куда буду добавлять данные с запроса из формы
                        document.getElementById('lcl').innerHTML = data;
                        // Теперь можно отправлять submit от формы и выводить что там есть
                        // Вот тут как раз и проблема т.е. либо то что выше не получил форму либо форма не заполнена
                       extraLoadLC(param);
                        // Ну и повешать события для того что получил
                        setupHistoryClicks(document.getElementById('lc'));         
                    });
        })
 
        .error(function(xhr, er_type) {
            alert('Ошибка: ' + er_type);
        });
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 24.09.2012, 19:56
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

Сообщение от Aetae Посмотреть сообщение
Зачем setTimeout'ы везде напиханы вообще непонятно.
чуть помедленнее, кони, чуть помедленнее..)
Ответить с цитированием
  #8 (permalink)  
Старый 24.09.2012, 20:04
Аспирант
Отправить личное сообщение для Sergey999 Посмотреть профиль Найти все сообщения от Sergey999
 
Регистрация: 25.12.2011
Сообщений: 75

Исправил, правда все равно проблема остается там же, но уже намного лучше))
Все равно на момент:

// Теперь можно отправлять submit от формы и выводить что там есть
// Вот тут как раз и проблема т.е. либо то что выше не получил форму либо форма не заполнена
extraLoadLC(param);


Форма уже должна быть и быть заполнена, но часто скрипт не срабатывает, с Timeout 100-200ms работает

Последний раз редактировалось Sergey999, 24.09.2012 в 20:10.
Ответить с цитированием
  #9 (permalink)  
Старый 02.10.2012, 10:02
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

По-моему Вы переборщили с а-синхронными запросами.
Сделайте первый запрос синхронным.
Пока он не выполнится, дальше ниче не пойдет.
Еще попытайтесь разобраться с замыканиями.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод информации со страницы в ajax fAmOus Элементы интерфейса 4 17.07.2012 00:32
Почему результат Ajax запроса - Исходный код страницы pro_xaoc AJAX и COMET 4 23.11.2011 10:03
установить переменную сессии через ajax при загрузке страницы optik77 AJAX и COMET 3 02.06.2011 17:36
Страницы на ajax. Нужна помощь профи!!! trafbek AJAX и COMET 0 19.04.2011 15:37
Вызов функции печати страницы полученной через AJAX Garik AJAX и COMET 4 02.03.2011 17:05