Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.03.2009, 21:32
Интересующийся
Отправить личное сообщение для human Посмотреть профиль Найти все сообщения от human
 
Регистрация: 19.02.2009
Сообщений: 15

Проблема с двумя запросами
есть 3 файла

i.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<style>
#obj1{
	position:absolute;
	width:50px;
	height:50px;
	top:10px;
	left:10px;
	border:1px solid black;
}

#obj2{
	position:absolute;
	width:50px;
	height:50px;
	top:40px;
	left:100px;
	border:1px solid red;
}
</style>
<script src="script.js"></script> <!-- Include the Drag.js script -->
<body>

	<div id='obj1'>
	
	</div>
	
	<div id='obj2'>
	
	</div>
</body>
</html>


script.js
window.onload = function(){
	var obj1 = document.getElementById('obj1');
	
	var obj2 = document.getElementById('obj2');
start1(obj1);
start2(obj2);
}
function start1(obj){
	var url = '/request.php?q=1';
	var a = new Ajax(url,obj);
}

function start2(obj){
	var url = '/request.php?q=0';
	var a = new Ajax(url,obj);
}

function addData(response,obj){
	obj.innerHTML = response;
}

function Ajax(url,obj){
var path = "http://localhost/ajax/";
this.url = path+url;
HTTP = this.GetAJAXLoader();
HTTP.open("GET",this.url,true);
HTTP.onreadystatechange = function() {
	if (HTTP.readyState==4){
		if (HTTP.status == 200){
		
				addData(HTTP.responseText,obj); 
		}
	}
}
HTTP.send(null);
}

Ajax.prototype.GetAJAXLoader = function(){
	var r;
   	if (typeof(window.XMLHttpRequest)!='undefined') { 
		try { r = new XMLHttpRequest(); } 
			catch (e) { alert("Ошибка при получении AJAX загрузчика"); } 
		}
   	else if (typeof(window.ActiveXObject)!='undefined') {
       	try { r = new ActiveXObject('Msxml2.XMLHTTP');} 
			catch (e){
				try { r = new ActiveXObject('Microsoft.XMLHTTP'); } 
					catch (e) {alert("Ошибка при получении AJAX загрузчика"); }
			}
	}
	else alert("Браузер не поддерживает AJAX");
	return r;
}


request.php
<?php
if ($_GET['q']) echo "obj1";
	else echo "obj2";
?>


Так вот пр загрузке i.html срабатывает событие onload и в результате отправляется 2 запроса на сервер и если верить FireBug то запросы завершились удачно и получили ответы. В результате чего мы долны наблюдать в каждом блоке по записи, но в FF этого не происходит, вот никак не могу понять в чем дело =((
В ie6 таже проблема пр первом запуске но после перезагрузке страницы все норм как должно быть....

что то я совсем запутался направьте меня на путь истинный =))
Заранее благадарю.
Ответить с цитированием
  #2 (permalink)  
Старый 10.03.2009, 22:22
Аспирант
Отправить личное сообщение для Onis Посмотреть профиль Найти все сообщения от Onis
 
Регистрация: 15.07.2008
Сообщений: 31

Вы вызываете одновременно два запроса. Так делать нельзя. Есть несколько выходов: или сделайте свою систему кэша с помощью массива (лучший вариант на моё мнение), или последовательно вызывайте запросы (следующий запрос идет только после окончания предыдущего) или создавайте отдельные классы со своими обработчиками для каждого запроса (не очень надежно).

Вот к примеру я сделал в вашем скрипте последовательную систему запросов:
var obj1 = null;
var obj2 = null;

window.onload = function(){
	obj1 = document.getElementById('obj1');
	obj2 = document.getElementById('obj2');
	start1(obj1);
}
function start1(obj){
    var url = '/request.php?q=1';
    var a = new Ajax(url,obj);
}
 
function start2(obj){
    var url = '/request.php?q=0';
    var a = new Ajax(url,obj);
}
 
function addData(response,obj){
    obj.innerHTML = response;
}
 
function Ajax(url,obj){
var path = "http://localhost/ajax/";
this.url = path+url;
HTTP = this.GetAJAXLoader();
HTTP.open("GET",this.url,true);
HTTP.onreadystatechange = function() {
    if (HTTP.readyState==4){
        if (HTTP.status == 200){
                addData(HTTP.responseText,obj); 
				if(obj.id == "obj1")
					start2(obj2);
        }
    }
}
HTTP.send(null);
}
 
Ajax.prototype.GetAJAXLoader = function(){
    var r;
       if (typeof(window.XMLHttpRequest)!='undefined') { 
        try { r = new XMLHttpRequest(); } 
            catch (e) { alert("Ошибка при получении AJAX загрузчика"); } 
        }
       else if (typeof(window.ActiveXObject)!='undefined') {
           try { r = new ActiveXObject('Msxml2.XMLHTTP');} 
            catch (e){
                try { r = new ActiveXObject('Microsoft.XMLHTTP'); } 
                    catch (e) {alert("Ошибка при получении AJAX загрузчика"); }
            }
    }
    else alert("Браузер не поддерживает AJAX");
    return r;
}

Видите? Криво, но теперь всё работает.
Ответить с цитированием
  #3 (permalink)  
Старый 10.03.2009, 22:26
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Onis
Вы вызываете одновременно два запроса. Так делать нельзя.
Да хоть десять.
Ответить с цитированием
  #4 (permalink)  
Старый 10.03.2009, 22:28
Аспирант
Отправить личное сообщение для Onis Посмотреть профиль Найти все сообщения от Onis
 
Регистрация: 15.07.2008
Сообщений: 31

Сообщение от Kolyaj
Да хоть десять.
Но не так как Они сделали.
Ответить с цитированием
  #5 (permalink)  
Старый 10.03.2009, 23:11
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Onis
Но не так как Они сделали.
А точнее?
Ответить с цитированием
  #6 (permalink)  
Старый 10.03.2009, 23:14
Аспирант
Отправить личное сообщение для Onis Посмотреть профиль Найти все сообщения от Onis
 
Регистрация: 15.07.2008
Сообщений: 31

А что точнее? Нерабочий скрипт сам за себя говорит. Или по вашему там всё верно?
Ответить с цитированием
  #7 (permalink)  
Старый 10.03.2009, 23:18
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

С первого взгляда -- да. А чтобы запустить это, слишком много телодвижений надо сделать.
Ответить с цитированием
  #8 (permalink)  
Старый 11.03.2009, 07:14
Интересующийся
Отправить личное сообщение для human Посмотреть профиль Найти все сообщения от human
 
Регистрация: 19.02.2009
Сообщений: 15

=((( да уж .........
По идеи JS ведь выполняется в 1 поток, а если определены несколько, то просто один ждет завершения другого!
Ответить с цитированием
  #9 (permalink)  
Старый 11.03.2009, 09:16
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Запросы XMLHttpRequest выпадают из потока, они асинхронные.
Ответить с цитированием
  #10 (permalink)  
Старый 11.03.2009, 10:29
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от _NoName_
Одновременно выполняется только один асинхронный запрос а остальные действуют после него...
Они все одновременно запускаются. У браузера есть ограничение на количество одновременных подключений к одному хосту, обычно два.

Сообщение от _NoName_
не могли бы ткнуть пальцем в скрипт где есть объект ajax и после получения ответа в зависимости какие параметры были переданы объекту вызывается функция с этими же параметрами
Вот прямо на этой странице, форма быстрого ответа.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с обработкой DIV nerik AJAX и COMET 2 22.08.2008 17:40
Проблема с разрешением сайта-экрана Till Элементы интерфейса 5 28.07.2008 15:11
Проблема с меню 856 Общие вопросы Javascript 3 28.07.2008 14:29
Проблема с маркером kostian02 Общие вопросы Javascript 0 23.06.2008 16:10
проблема с передачей русского текста в Prototype subaru Prototype & script.aculo.us 2 26.07.2007 16:56