
24.09.2012, 18:07
|
Аспирант
|
|
Регистрация: 25.12.2011
Сообщений: 75
|
|
Ajax и ожидание окончания формирования страницы?
Проблема уже давно была но на первое время сделал на setTimeout, но теперь таймауты стали уж очень длинными, хочу сделать нормально
Делаю 2 Ajax запроса на сервер, вывожу результат на страницу, в одном из них форма. Теперь вешаю элементы на формы события, заполняю форму на основании GET параметров и делаю еще один запрос чтобы вывести результат по умолчанию, но тут есть одна проблема т.е. отправляю туда все что в новой форме
Последний запрос с параметрами формы часто возвращает пустой результат т.к. из за задержек сервера не все процессы выше успевают произойти, как сделать чтобы все это происходило последовательно? Т.е. пока не закончит работу предыдущая функция - новая не начинала свою работы и т.п...?
Пока все лечится увеличением задержки для последнего Ajax запроса, но уже смело можно ставить 1сек что перебор явно, а так то форма не успела даже появиться от первого Ajax запроса, то не успела заполнится, то еще что то...
|
|

24.09.2012, 18:14
|
Аспирант
|
|
Регистрация: 25.12.2011
Сообщений: 75
|
|
Хотя суда по тому что первые два запроса уже асинхронны, то тут бррр, вообще нужно как-то заставить их быть строго последовательными пока первый не закончил - второй никак не должен начинаться
|
|

24.09.2012, 18:30
|
Аспирант
|
|
Регистрация: 25.12.2011
Сообщений: 75
|
|
Блин как же бороться с этой трех этажной асинхронностью...
|
|

24.09.2012, 18:40
|
 |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,595
|
|
Как все нормальные люди - колбэками.
В чём проблема не понятно совершенно. Приведите пример кода.
__________________
29375, 35
|
|

24.09.2012, 18:46
|
Аспирант
|
|
Регистрация: 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) {
});
|
|

24.09.2012, 19:01
|
 |
Тлен
|
|
Регистрация: 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
|
|

24.09.2012, 19:56
|
 |
Профессор
|
|
Регистрация: 28.03.2012
Сообщений: 376
|
|
Сообщение от Aetae
|
Зачем setTimeout'ы везде напиханы вообще непонятно.
|
чуть помедленнее, кони, чуть помедленнее..)
|
|

24.09.2012, 20:04
|
Аспирант
|
|
Регистрация: 25.12.2011
Сообщений: 75
|
|
Исправил, правда все равно проблема остается там же, но уже намного лучше))
Все равно на момент:
// Теперь можно отправлять submit от формы и выводить что там есть
// Вот тут как раз и проблема т.е. либо то что выше не получил форму либо форма не заполнена
extraLoadLC(param);
Форма уже должна быть и быть заполнена, но часто скрипт не срабатывает, с Timeout 100-200ms работает
Последний раз редактировалось Sergey999, 24.09.2012 в 20:10.
|
|

02.10.2012, 10:02
|
Профессор
|
|
Регистрация: 14.09.2012
Сообщений: 158
|
|
По-моему Вы переборщили с а-синхронными запросами.
Сделайте первый запрос синхронным.
Пока он не выполнится, дальше ниче не пойдет.
Еще попытайтесь разобраться с замыканиями.
|
|
|
|