Вывод буфера в AJAX запросе

Статус
В этой теме нельзя размещать новые ответы.

HalliK

Постоялец
Регистрация
4 Фев 2007
Сообщения
120
Реакции
169
Приветствую всех! Возник один важный для меня момент в работе с аяксом, вот собственно оригинал скрипта - Для просмотра ссылки Войди или Зарегистрируйся. При нажатии кнопки отправить появляется анимация, мол скрипт выполняется и после окончания работы скрипта анимация исчезает и грузится буфер. Так вот как организовать подобие flush() при выполнении аякс запроса? То есть я нажимаю кнопку, появляется анимация, выполняется код до первого flush() и это выводится в хтмл, анимация не исчезает и скрипт выполняется до конца. Я так понимаю это делается настороне клиента посредством запросов со стороны клиента на сервер каждые N миллисекунд, но так как в JS и mootools не силен, то надеюсь что вы мне поможете;)

P.S. Вот еще интересный скрипт - Для просмотра ссылки Войди или Зарегистрируйся. Я думаю скрестить можно, но в нем та же самая проблема - 10 картинок загружаются, и потом все враз показываются, было бы классно если бы по мере загрузки картинок те появлялись бы в хтмл...

В общем думаю я в нужном разделе и надеюсь на вашу помощь! Заранее спасибо!
 
Просто посылай запрос каждые N секунд и выводи результат.
 
Код:
window.addEvent('domready', function() {
	// You can skip the following two lines of code. We need them to make sure demos
	// are runnable on MooTools demos web page.
	if (!window.demo_path) window.demo_path = '';
	var demo_path = window.demo_path;
	// --
	$('myForm').addEvent('submit', function(e) {
		//Prevents the default submit event from loading a new page.
		e.stop();
		//Empty the log and show the spinning indicator.
		var log = $('log_res').empty().addClass('ajax-loading');
		//Set the options of the form's Request handler. 
		//("this" refers to the $('myForm') element).
		this.set('send', {onComplete: function(response) { 
			log.removeClass('ajax-loading');
			log.set('html', response);
		}});
		//Send the form.
		this.send();
	});
});
вот сам js. По части JS абсолютный ноль, примерчик накатаешь?:thenks:
 
Код:
window.addEvent('domready', function() {
	// You can skip the following two lines of code. We need them to make sure demos
	// are runnable on MooTools demos web page.
	if (!window.demo_path) window.demo_path = '';
	var demo_path = window.demo_path;
	// --
	$('myForm').addEvent('submit', function(e) {
//добавь сюда 
[B]showContactTimer();[/B]

		//Prevents the default submit event from loading a new page.
		e.stop();
		//Empty the log and show the spinning indicator.
		var log = $('log_res').empty().addClass('ajax-loading');
		//Set the options of the form's Request handler. 
		//("this" refers to the $('myForm') element).
		this.set('send', {onComplete: function(response) { 
			log.removeClass('ajax-loading');
			log.set('html', response);
		}});
		//Send the form.
		this.send();
// добавь сюда 
[B]hideContactTimer();[/B]
	});
});

[B]function showContactTimer () {
	var loader = document.getElementById('loadBar');
	loader.style.display = 'block';
	var loader = document.getElementById('ans');
	loader.style.display = 'block';	
//раскомментируй если нужно убрать форму через некоторое время
 	//sentTimer = setTimeout("hideContactTimer()",3000);
	}
function hideContactTimer () {
	var loader = document.getElementById('loadBar');
	// Hide the load bar alas! Done Loading
	loader.style.display = "none";[/B]
	// Now Hijack the form elements


в  html воткни вот такой код 
[B]<div id="ans" style="display:none">		</div>
<div id="loadBar" align="center" style="display:none">		
<strong>Отправка данных...</strong>	<br />
<img src="comments/img/loading.gif" alt="Загрузка..." title="Отправка данных" />
</div>	
<div>[/B]
 
Увы, не работает, после выполнения выдает сразу весь буфер, ане по частям как хотелось... Попробую приязать Для просмотра ссылки Войди или Зарегистрируйся
 
Увы, не работает, после выполнения выдает сразу весь буфер, ане по частям как хотелось... Попробую приязать Для просмотра ссылки Войди или Зарегистрируйся

Тот код, который я написал - выдает анимацию. Осталось разобраться куда точно нужно вставить show и hide функции. :)
 
Вот я всяко пробую, ну никак не хочет отдаватькусками :( Можешь скачать ради интереса Для просмотра ссылки Войди или Зарегистрируйся с офсайта мутулс. Там анимация есть, но попробуй воткнуть в пхп скрипт что то типа этого:
Код:
for ($i=1;$i<=3;$i++){echo $i.'<br />';flush();sleep(1);}
То что есть, сразу выдаст 1 2 3 в столбик, вместо желаемых 1 вывели 2 вывели и 3 вывели...
 
Ты вроде как не совсем понимаешь: каждый AJAX-запрос - это запуск твоего скрипта по новой и ждать он будет пока твой скрипт не отработает до конца.

Ты лучше обрисуй свю задачку полностью, тогда и решение найдётся.
 
каждый AJAX-запрос - это запуск твоего скрипта по новой ...
эту часть я понимаю :)
ждать он будет пока твой скрипт не отработает до конца.
Но ведь можно же во время выполнения скрипта отдавать буфер? Как то реализовано же аякс загрузка файла с прогресс баром например, там вроде как каждые N миллисекунд идет обращение к скрипту, тот отдает массив получаемый функцией uploadprogress_get_info, делаются вычисления по определенным значениям элементов массива... и рисуется прогресс бар, но смысл не в этом, мне то нужно чтобы аяксом появлялись в каком нибудь div'е сообщения выполняемого скрипта, а не все сразу.

Живой пример как это можно использовать:
Рега аккаунтов - указал в поле кол-во регистрируемых аккаунтов и передаешь аяксом значение поля num скрипту... В скрипте следующий код:
PHP:
for ($i = 0; $i < $_POST['num'];$i++) {
    $login = 'nulled';
    $password = generate_password(6); //функция пассы генерит допустим
    // далее код автореги
    // если успешно зарегистрировано,то выдаем
    echo $login.':'.$password.'<br />';
    flush();
}
Мне нужно если я указал 3 акка, то чтоб показывался процесс, примерно знал где идет работа скрипта, а не чтоб все это в конце стопкой появлялось :)

P.S. Не судите строго, просто хочу обворачивать свои срипты в красивые оболочки, неравнодушен к дизайну и веб 2.0. Спасибо всем заранее!
 
Для того, чтобы отдавать текст кусками, тебе придется запускать скрипт несколько раз. Т.е. запустил 1 раз - получил кусок текста, отобразил на сайте и запустил снова этот же скрипт (или другой), получил данные, отобразил ...
Вот по такой технологии работают AJAX.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху