Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.02.2012, 02:40
Аспирант
Отправить личное сообщение для KingStar Посмотреть профиль Найти все сообщения от KingStar
 
Регистрация: 25.08.2011
Сообщений: 42

createRequestObject в цикле
Вем привет. Задача отправить запрос и получить ответ в цикле, цикл может быть разным, вот код:

for (i=0; i<5; i++) {
		
		var id = 'id_'+i;		
		var id_send = document.getElementById(id).value;
		var id_result = 'result_'+i;
		
		var http = createRequestObject();		
						
		if( http ) {
				
			http.open('get', 'name.php?send_id='+id_send);
		
			http.onreadystatechange = function () {							
				if(http.readyState == 4) {				
					document.getElementById(id_result).innerHTML=http.responseText;						
					return;
				}
			}
				
				http.send(null);				
		} else {
				document.location = 'index.php';
		}

}


результат вставляется в id='id_result' в таблицу, но проблема в том, что результат получает только последний, и заполняется результат в таблице только последняя строка

Где грабли???
Ответить с цитированием
  #2 (permalink)  
Старый 10.02.2012, 20:06
Аспирант
Отправить личное сообщение для KingStar Посмотреть профиль Найти все сообщения от KingStar
 
Регистрация: 25.08.2011
Сообщений: 42

Никто не знает???
Ответить с цитированием
  #3 (permalink)  
Старый 10.02.2012, 21:11
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Оберните всё что в цикле в функцию
Ответить с цитированием
  #4 (permalink)  
Старый 10.02.2012, 22:27
Аспирант
Отправить личное сообщение для KingStar Посмотреть профиль Найти все сообщения от KingStar
 
Регистрация: 25.08.2011
Сообщений: 42

Нифига чет не получается, ошибки разные бъет, может напишите куда и как??

Вот весь код:


echo "<script language='javascript'>
	
	var num = ".$rows.";
	
	for (i=0; i<num; i++) {
		
		id = 'distribution_id_'+i;		
		distribution_id = document.getElementById(id).value;
		id_result = 'result_send_'+i;
	
	 	http = createRequestObject();					
						
		http.function(){	
					
		if(http.readyState == 4) {	
			if(http.status == 200) {	
				document.getElementById(id_result).innerHTML=http.responseText;	
			}
		}
					
		http.open('get', 'func.php?send_distribution='+distribution_id, true);														
		http.send(null);				
    }
  
}

</script>";

Последний раз редактировалось KingStar, 10.02.2012 в 22:30.
Ответить с цитированием
  #5 (permalink)  
Старый 10.02.2012, 22:30
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

http://javascript.ru/basic/closure
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #6 (permalink)  
Старый 11.02.2012, 05:31
Аспирант
Отправить личное сообщение для KingStar Посмотреть профиль Найти все сообщения от KingStar
 
Регистрация: 25.08.2011
Сообщений: 42

Я уже всю голову сломал Уже все перепробовал что только можно

Методом alert(i); выяснил, что до строки http.onreadystatechange i выдает согласно циклу, а уже внутри http.onreadystatechange выдает номер последнего цикла

window.onload = function(){

	for (i=0; i<4; i++) {
		
		id = "distribution_id_"+i;		
		distribution_id = document.getElementById(id).value;
		id_result = "result_send_"+i;


                var http = createRequestObject();				
			
		if( http ) {
				
				http.open("get", "func.php?send_distribution="+distribution_id, true);
	

/* ЗДЕСЬ alert(i) выдает номер согласно циклу от 0 до 4  */

			
				http.onreadystatechange = function () {

/* ЗДЕСЬ alert(i) выдает номер 4  */
						
					if(http.readyState == 4) {					
						document.getElementById(id_result).innerHTML=http.responseText;	
						return;	
					}
				}



		
				http.send(null);
		} else {
			document.location = "index.php";
		} 



	}
}


Ответить с цитированием
  #7 (permalink)  
Старый 11.02.2012, 06:18
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от KingStar
Методом alert(i); выяснил, что до строки http.onreadystatechange i выдает согласно циклу, а уже внутри http.onreadystatechange выдает номер последнего цикла
А чему вы удивляетесь делая асинхронные запросы... хотите что бы цикл ждал... делайте синхронные запросы:

http.open("get", "func.php?send_distribution="+distribution_id, false);
Ответить с цитированием
  #8 (permalink)  
Старый 11.02.2012, 11:37
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Сообщение от devote
делайте синхронные запросы:
Нельзя советовать такое!
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #9 (permalink)  
Старый 11.02.2012, 11:52
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Nekromancer
Нельзя советовать такое!
ну а что ему еще посоветовать? есть два пути, либо сделать просто синхронно, либо все переделать иначе и по другому принципу. Но то что синхронно конечно не хорошо.
Ответить с цитированием
  #10 (permalink)  
Старый 11.02.2012, 11:57
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

devote,
Значит надо переделать, пусть пойдёт читать как.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод данных из базы в цикле со ссылкой на всплывающее окно alexvb Events/DOM/Window 14 10.02.2012 16:16
popup окно в PHP цикле ryobi522 Общие вопросы Javascript 5 10.02.2012 02:18
Как реализовать присваивание в цикле? pine Общие вопросы Javascript 7 25.02.2011 00:08
Привязка события click в цикле к эелементц craz Events/DOM/Window 8 14.11.2010 12:28
Проблема с передачей параметров в цикле. JonnyD3 jQuery 3 25.02.2010 16:18