Виснет скрипт PHP+Ajax

yeastor

Новичок
Виснет скрипт PHP+Ajax

Добрый День! Сдедал вподе все как в примерах, но есть проблема:
Имеется форма с несколькими инпутами, при нажатии на кнопку идет запрос

PHP:
$this->html_data.='<tr><td><input  type=button name=c_analize value=Анализ onclick=Analize(kwmass)></td></tr>';
Функция на вход принимает массив инпутов
PHP:
function  Analize(name)
{

createRequest();	
var url;
	//alert(name);
	for (i=1; i<name.length; i++)
	{
	//incrCount(1);
	url = "index.php?type=asa&kw_id="+name[i]; //делаем урл для запроса
	//alert(url);
	request.open("GET", url, false);                           //шлем запрос, повторям столько раз, сколько инпутов | указываем какой инпут будем считать
	request.onreadystatechange = updatePage;     //вот тут должно произойти изменение инпута
	request.send();
	//incrCount(10);
	}
	alert("Готово");
}
PHP:
function updatePage() {
     if (request.readyState == 4) {
       if (request.status == 200) {
         var response = request.responseText.split(";");
       //alert(request.responseText);
	   response2 = response[0].split("|");
	   document.getElementById(response2[0]+response2[1]).value = response2[2];
		}; 
     }

   }
Я хочу чтоб после request.onreadystatechange изменялось значение инпута, скрпт работал дальше, не мешая пользователю и после получения очередного ответа изменял значение инпута

Проблема вот в чем: после нажатия на кнопку страница зависает, и отвисает только после получения всех ответов т.е. столько сколько инпутов.
 

dimagolov

Новичок
а какой глубокий смысл в посылании отдельного запоса на каждый инпут? или их там несколько сотен или тысяч?
 

yeastor

Новичок
Их там не тысячи, но значение для каждого обрабатывается долго, и чтобы не ждать, пользователь должен видить результат работы в виде поочередного заполнения инпутов значениями.
 

confguru

ExAdmin
Команда форума
Ну если Вы посещали мастер-классы по Ajax,
это не было бы для Вас проблеммой ;-)
 

yeastor

Новичок
да, ну я тупанул, так вот с примера скопировал
Сделал так:
PHP:
function  Analize(name) 
{ 

createRequest();     //создание XMLHttpRequest
var url; 
    //alert(name); 
    for (i=1; i<name.length; i++) 
    { 
    //incrCount(1); 
    url = "index.php?type=asa&kw_id="+name[i]; //делаем урл для запроса 
    //alert(url); 
    request.open("GET", url, true);                           //шлем запрос, повторям столько раз, сколько инпутов | указываем какой инпут будем считать 
    request.onreadystatechange = updatePage;     //вот тут должно произойти изменение инпута 
    request.send(); 
    //incrCount(10); 
    } 
    alert("Готово"); 
}
Теперь я получаю только ответ от последнего скрипта, т.е. ответ для заполнение последнего инпута....
 

flash-vkv

Новичок
вот ссылка http://developer.mozilla.org/en/docs/AJAX:Getting_Started посмотрите где Step 3 и подумайте почему XMLHttpRequest создается через var
Код:
        var httpRequest;
        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            httpRequest = new XMLHttpRequest();
            ...
и каким образом устанавливается обработчик
Код:
    ...
    httpRequest.onreadystatechange = function() { alertContents(httpRequest); };
    ...
    function alertContents(httpRequest) { ...  }
 

BRat

o_0
flash-vkv
собсно как создается обьект реквеста в коде не видно, да и обработчик он правильно устанавливает (с оговорками на то, что этот обьект будет использоваться только для данных запросов)

не очень полезная ссылка в этом случае. Единственное что можно посоветовать, это alert() и дебаг
 

flash-vkv

Новичок
...
~ необратил внимание на true ~

тормаза так или иначе будут жуткие потому как синхрон
 

yeastor

Новичок
Их там не тысячи, но значение каждого считается долго, чтобы пользователь не смотрел в зависшую страницу, они должны поочередно заполнятся.

Да, точно, я тупанул.... исправил false на true. Теперь я получаю ответ только от последнего скрипта, т.е. значение только для последнего инпута
 

dimagolov

Новичок
> Их там не тысячи, но значение каждого считается долго

если не секрет, что за значение такое которое на сервере вычисляется "долго". и какова загрузка сервере при этом (проц, винт)?
 
Сверху