AJAX + асинхронность

barthon64

Новичок
AJAX + асинхронность

Раньше использовал Аякс, но как-то порядок и время выполнения запросов был особо не важен.
Теперь нужно:
1. послать на сервер запрос, запустить скрипт №1 (который может выполняться долго)
2. затем запустить таймер, который будет запускать скрипт №2 (он будет узнавать статус отработки скрипта №1 и отсылать данные клиенту)

Для тестов в скрипте №1 поставил задержку 5сек, запустил скрипт №2, он вернул данные только после отработки скрипт №1 (через 5сек.)

Для работы испольузую библиотеку Котерова (JsHttpRequest).
Есть 2 инпута, на онклик каждого повешена одна из этих функций, в loader.php установлена задержка 5сек.
Как сделать так, чтобы скрипт check.php запускался и возвращал данные не дожидаясь завершения loader.php?

PHP:
function send() { 

	JsHttpRequest.query(
		'loader.php', 
		{'email': email, 'message': message}, 
						
		function(responseJS, responseText) {
			alert(1);	
			
		}		
		,		
		true 
   );
  
}


function check() {
	
	JsHttpRequest.query(
		'check.php', 
		{}, 
		function(responseJS, responseText) {
			alert(2);
		},
		true 
                );
	
	
}
 

911ha

Новичок
по простому
введи глобальную переменную в JS которая по умолчанию будет в 0 если функция нужная отрботала ставь в 1 и потом ты знаешь что у тя такой то скрипт отрботал
 

barthon64

Новичок
>а как скрипт 1 фиксирует свой статус, чтоб скрипт 2 мог его узнать?

скрипт 1 формирует куку и сохраняет в БД, затем в цикле отрабатывает, обновляя данные в БД (кол-во отправленных писем)

скрипт 2 по куке извлекает нужные данные из БД и отправляет клиенту

---------------------------------------------------

не пойму самое главное - под асинхронностью понимается параллельная отправка запросов И прием данных с сервера?

просто на моем примере вижу параллельную отправку, а прием получается последовательный ....
 

Gas

может по одной?
barthon64
1. поставть firebug addon к firefox'у и смотри какие ajax запросы отправляет броузер, в какой последовательности.
2. каким чудесным образом клиент (броузер) получает куку для скрипта 2 до выполнения скрипта 1 ? :) Такая схема не может работать.
 

barthon64

Новичок
>1. поставть firebug addon к firefox'у и смотри какие ajax запросы отправляет броузер, в какой последовательности.

именно им (ну еще алертами) я вижу как
1. запускается скрипт1 (зависает на 5сек.)
2. сразу же запускаю скрипт2
3. они вместе дружно подвисают на 5сек., ну а потом срабатает колбек функция из check() - alert(2)

>2. каким чудесным образом клиент (броузер) получает куку для скрипта 2 до выполнения скрипта 1 ? Такая схема не может работать.

согласен, поспешил, сенкс:)
ну тогда оставляю куку JS и передаю ее значение Аяксом на сервер


так и не получил ответ на последний вопрос:(
ответы должны приходить асинхронно?
 

Gas

может по одной?
Обычно по умолчанию в подобных библиотеках стоит асинхронный режим.
Не знаю что сейчас находится в check.php, но оставь его пустым или с каким-нибудь echo, чтоб логики никакой не было и проверь ещё раз.
ну тогда оставляю куку JS и передаю ее значение Аяксом на сервер
а зачем куки? генери какой-нить идентификатор или js'ом и в php при загрузке этой странице и передавай его параметром обоим скриптам.
 

barthon64

Новичок
>Обычно по умолчанию в подобных библиотеках стоит асинхронный режим.

да, я проверил параметр asyncFlag=true, если поставить false запросы асинхронно не оправляются

>Не знаю что сейчас находится в check.php, но оставь его пустым или с каким-нибудь echo, чтоб логики никакой не было и проверь ещё раз.

пустые (кроме бекенд частей библиотеки JsHttpRequest)

loader.php
include ("classes/ajax/JsHttpRequest.php");
$JsHttpRequest = new JsHttpRequest("utf-8");

sleep(10);

check.php
include ("classes/ajax/JsHttpRequest.php");
$JsHttpRequest = new JsHttpRequest("utf-8");


>а зачем куки? генери какой-нить идентификатор или js'ом и в php при загрузке этой странице и передавай его параметром обоим скриптам.

чтобы индикатор работы скрипта1 работал после закрытия/открытия броузера

-~{}~ 08.01.08 22:07:

пока писал ответ, сам натолкнулся на проблему
в этих файлах был общий инклюдник а там session_start()

и я наблюдал картинку аналогичную
1.php
session_start();
sleep(10);

2.php
session_start();

= подвисает на 10сек.
 

kernel32

Новичок
Выход здесь именно в session_write_close(), когда-то и сам в такую "яму" попал, и тоже с Аяксом :)
 
Сверху