Javascript.RU

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

не корректно работает скрипт в IE
Всем здравствуйте!
Проблема в том что в IE (8,9 в остальных не проверял), скрипт выполняется следующим образом: сначала происходит первая отправка (send(f=0)) в самом низу скрипта, срабатывает обработчик statechange запрашивает еще раз скрипт и после этого не срабатывает statechange скрипт перестает выполнятся. В других браузерах (chrome, ff3, ff4) все работает как положено. Т.е. отправился запрос пришел ответ сработала функция statechange и все это происходит постоянно....почему в IE не так никак не могу разобраться. Спасибо.
код самого скрипта:
<html>
<head>
	<title>Tween tester</title>	
	<script src="http://openlayers.org/api/OpenLayers.js"></script>
	<!--<script type="text/javascript" src = "http://localhost/OpenLayers-2.10/OpenLayers.js"></script>-->
	<script type="text/javascript" src="flowplayer/example/flowplayer-3.2.6.min.js"></script>
	<script type="text/javascript" src="http://nisoskol.ru/ajax_object.js"></script>
	<script src="jquery-1.3.1.min.js"></script>
	<script src="jquery.json-1.3.js"></script>

</head>

<body>
<div style="width:100%; height:90%; top: 5%; position:relative" id="map"></div>
	
	<script defer="defer" type="text/javascript">
	var feat;
	var tr;
	var current = {x: 0, y: 0};
	var flg = 0;
	//var statusElem = document.getElementById('status');
	//var statusElem2 = document.getElementById('status2');
	//var out_obj;
	function send (param)
	{
		//statusElem.innerHTML = "Запрос данных...";
		//alert ("Отправка");
		req.open('POST', 'get2.php', true);  
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		req.send(param);
	}
	var mercator = new OpenLayers.Projection("EPSG:900913");
    var geographic = new OpenLayers.Projection("EPSG:4326");
	var options = {
			minResolution: "auto",
			maxResolution: "auto",
			maxExtent: new OpenLayers.Bounds(-20037508.3427892,-20037508.3427892,20037508.3427892,20037508.3427892),
			controls: [new OpenLayers.Control.MouseDefaults()]
		};
			  
        var map = new OpenLayers.Map('map', options);
		
		
		var mapnik = new OpenLayers.Layer.OSM();
		map.addLayer(mapnik);
		

		
		var lonLat = new OpenLayers.LonLat( 37.89, 51.32 )
          .transform(
            new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
            map.getProjectionObject() // to Spherical Mercator Projection
          );

		  var zoom=15;
	map.setCenter (lonLat, zoom);
		
		//map.zoomToMaxExtent();
		map.addControl(new OpenLayers.Control.LayerSwitcher());
		map.addControl(new OpenLayers.Control.MousePosition());
		map.addControl(new OpenLayers.Control.PanZoomBar());
	var req = getXmlHttp();
	
	req.onreadystatechange = function()
	{ 	
		//alert ("Сработала функция обработчик ответа от сервера");
		if (req.readyState == 4)
		{ 
			//statusElem.innerHTML = req.responseText;
			//alert (req.responseText);
			if(req.status == 200)
			{ 
				var in_obj = $.evalJSON(req.responseText);
				if (in_obj[0].flg == 0)
				{
					if (in_obj[0].lon[0] == "n") // Если нет координат запросить еще
					{
						//alert("Нет первой координаты, запрашиваем еще раз");
						flg = 1;
						send('f=0');

//						return;
					}
					else // Координата пришла, отрисовываем машину, добавляем слой
					{
					//alert ("Координаты нет, а код продолжает выполнятся")
					var lonLat = new OpenLayers.LonLat( in_obj[0].lon[0], in_obj[0].lat[0] )
					.transform(
						new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
						map.getProjectionObject() // to Spherical Mercator Projection
					);
					current = {x: lonLat.lon, y: lonLat.lat};
					feat = new OpenLayers.Feature.Vector(
						new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat), {type:15});
					
					var myStyles = new OpenLayers.StyleMap({
					"default": new OpenLayers.Style({
                    pointRadius: "${type}", // sized according to type attribute
                    graphicZIndex: 1,
					label: "31",
					fontColor: "#000000",
					labelYOffset: 7,
					labelXOffset: 13,
					fontWeight: 900,
					graphic: true,
					externalGraphic: "http://nisoskol.ru/mr.png"
					})
					});
					
					tr = new OpenLayers.Layer.Vector("Маршрутки", 
					{
						styleMap: myStyles,
			
						rendererOptions: {zIndexing: true}
					});
					tr.addFeatures(feat);		
					map.addLayer(tr);
					var out_obj = new Array;
					out_obj[0] = new Object();
					out_obj[0]['last_dt'] = in_obj[0].dt[0];
					var param = 'par=' + encodeURIComponent($.toJSON(out_obj)) + '&f=1';
					//alert ("пришла первая координата, запрашиваем следующие ");
					send(param);
					}
				}
				else
				{
					//statusElem.innerHTML = "flag = 1";
					if (in_obj[0].lon[0] == "n") // нет следующих координат
					{
						//alert ("Идет загрузка координат...");
						flg = 1;
						var out_obj = new Array;
						out_obj[0] = new Object();
						out_obj[0]['last_dt'] = in_obj[0].dt[0];
						var param = 'par=' + encodeURIComponent($.toJSON(out_obj)) + '&f=1';
						//alert("flag = 1, Нет новых координат");
						send (param);
						//return;
					}
					else // Есть следующие координаты
					{
						//statusElem.innerHTML = "i=0";
						//alert ("this ON");
						var i = 0;
						while (in_obj[0].lat[i])
						{
							i++;
						}
					}
					i--;
					//statusElem2.innerHTML = i;
					var tween = new OpenLayers.Tween(OpenLayers.Easing.Linear.easeIn);
					
					var lonLat2 = new OpenLayers.LonLat( in_obj[0].lon[i], in_obj[0].lat[i] )
					.transform(
						new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
						map.getProjectionObject() // to Spherical Mercator Projection
					);
					//i--;
					var to = {x: lonLat2.lon, y: lonLat2.lat};
					//var to = {x: lonLat.lon, y: lonLat.lat};
					var s = 5000;
					if (i > 5)
					{
						s = 100;
					}
					else if (i > 2)
					{
						s = 500;
					}
					else if (i > 1)
					{
						s = 1000;
					}
					else if (i == 0)
					{
						s = 2000;
					}
					
					//var s2 = 2000;
					var callbackss = 
					{
						eachStep: function(value) 
						{
							if (i > 5)
							{
								s = 100;
							}
							else if (i > 2)
							{
								s = 500;
							}
							else if (i > 1)
							{
								s = 1000;
							}
							else if (i == 0)
							{
								s = 2000;
							}
							
							if (value.x == to.x && value.y == to.y) // Проверяем доехал до следующей кординаты или нет
							{
								//alert ("Доехал");
								var ll = new OpenLayers.LonLat( in_obj[0].lon[0], in_obj[0].lat[0] )
								.transform(
								new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
								map.getProjectionObject() // to Spherical Mercator Projection
								);
								
								if (to.x != ll.lon) // Если доехал не до последней координаты
								{
									var ll2 = new OpenLayers.LonLat( in_obj[0].lon[i], in_obj[0].lat[i] )
									.transform(
									new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
									map.getProjectionObject() // to Spherical Mercator Projection
									);
									//statusElem.innerHTML = in_obj[0].dt[i];
									//statusElem2.innerHTML = i;
									i--;
									current = {x: value.x, y: value.y};
									to = {x: ll2.lon, y: ll2.lat};
									tween.stop();
									tween.start(current, to, s, {callbacks:callbackss});
								}
								else // Если доехал до последней точки назначения шлем запрос на новые координаты
								{
									//alert ("Отправка");
									//current = {x: value.x, y: value.y};
									tween.stop();
									var out_obj = new Array;
									out_obj[0] = new Object();
									out_obj[0]['last_dt'] = in_obj[0].dt[0];
									var param = 'par=' + encodeURIComponent($.toJSON(out_obj)) + '&f=1';
									//alert ("Доехал до последней координаты");
									send(param);
								}
							}
							tr.features[0].move (new OpenLayers.LonLat (value.x + 0.1, value.y + 0.1));

						}
					}
					tween.start(current, to, s, {callbacks:callbackss});
				}
				
			} //if(req.status == 200)
			else
			{
				//alert ("this");
				//var t =1;
			}
			//alert ("this");
		} //if (req.readyState == 4)
	} //onreadystatechange
	//alert ("this");
	if (flg == 0)
	{
		//alert("Запрос данных");
		send ('f=0');	
	}
	//alert("the end");
	
</script>

</body>
</html>


Код библиотеки ajax_object.js
function getXmlHttp(){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}
Ответить с цитированием
  #2 (permalink)  
Старый 22.04.2011, 08:12
Интересующийся
Отправить личное сообщение для MasterYoda Посмотреть профиль Найти все сообщения от MasterYoda
 
Регистрация: 18.04.2011
Сообщений: 15

Не знаю как остальным, но мне тупо лень читать столько кода. Попробуйте выделить проблемный фрагмент
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт работает корректно везде, кроме IE 6 McS Events/DOM/Window 1 10.04.2011 15:37
скрипт работает в IE через раз jsVAN Internet Explorer 2 10.03.2011 03:27
Не работает скрипт :( VladimirV Javascript под браузер 5 21.12.2010 14:26
Скрипт В IE отрабатывает корректно, но не работает в FF 3.5 Sonkkorh AJAX и COMET 11 27.07.2009 19:03
Скрипт меню-гармошки работает выборочно Extern Элементы интерфейса 2 23.02.2009 15:32