Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 05.10.2009, 14:46
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 08.08.2009
Сообщений: 95

Сообщение от x-yuri Посмотреть сообщение
если есть, на стороне php можно воспользоваться json_encode. А на стороне js: eval( '('+s+')' );
Есть, попробую. Спасибо.
Ответить с цитированием
  #12 (permalink)  
Старый 05.10.2009, 15:03
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 08.08.2009
Сообщений: 95

Сообщение от Kolyaj Посмотреть сообщение
Ну значит m.lat[i] не массив.
if(m['mcount'] > 0) {
		while(i < m['mcount']) {
			for(var i2=0;i2 < all_lat.length;i2++){
				console.log(m);
				if(m['lat'].length > 0) {
					if(m['lat'][i] == all_lat[i2]){
						m['lat'][i].splice(i,1);
						m['lng'][i].splice(i,1);
					}
				}
			}
			i++;
		}
	}


Object lat=[2] lng=[2] mcount=2


Lat:
["56.50097598931345", "56.49983904637648" 0=56.50097598931345 1=56.49983904637648]
Ответить с цитированием
  #13 (permalink)  
Старый 05.10.2009, 15:05
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 08.08.2009
Сообщений: 95

Что самое интересное, ошибка происходит, только на первом эвенте, а потом все повторы проходят без ошибок.
Ответить с цитированием
  #14 (permalink)  
Старый 05.10.2009, 15:26
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Beck
Object lat=[2] lng=[2] mcount=2
ну так, m['lat'] - не массив, а тем более m['lat'][i]
Ответить с цитированием
  #15 (permalink)  
Старый 05.10.2009, 15:52
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 08.08.2009
Сообщений: 95

А как тогда правильно обратиться к данным?

Я не особо дружу с яваскриптом, так что с объектами еще не умею обращаться.

var m = {"lat": lat,"lng": lng,"mcount": data1[2]};

Как правильно создать многомерный массив в моем случае, если lat и lng возможно будут массивами в прилетевшем ответе.

var m = [];
			m.push(lat);
			m.push(lng);
			m.push(data1[2]);


Так будет правильно?

*Вроде разобрался*
Только не понял, как обращаться к данным ассоциативного массива/объекта.

Последний раз редактировалось Beck, 05.10.2009 в 16:26.
Ответить с цитированием
  #16 (permalink)  
Старый 05.10.2009, 16:27
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от x-yuri
ну так, m['lat'] - не массив, а тем более m['lat'][i]
или просто не видно, что он из себя представляет

Сообщение от Beck
Еще бы узнать, как ассоциативный массив создавать и как обращаться к его данным
var a = {a: 1, b: 2};
alert(a.a);
Ответить с цитированием
  #17 (permalink)  
Старый 05.10.2009, 17:23
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 08.08.2009
Сообщений: 95

Сообщение от x-yuri Посмотреть сообщение
или просто не видно, что он из себя представляет


var a = {a: 1, b: 2};
alert(a.a);
А в случае многомерного?
Ответить с цитированием
  #18 (permalink)  
Старый 05.10.2009, 18:06
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

try to guess
Ответить с цитированием
  #19 (permalink)  
Старый 05.10.2009, 19:37
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 08.08.2009
Сообщений: 95

var allmakers = [];
var all_lat = [];
var all_lng = [];
var all_lat_length = 0;
var all_lng_length = 0;

function insert_marker(lat,lng){
	all_lat.push(lat);
	all_lng.push(lng);
	all_lat_length++;
	all_lng_length++;
	var mark = new GMarker(new GLatLng(lat,lng)); 
	allmakers.push(mark);
}

function process_markers(m) {
	console.log(allmakers);
	if(all_lat_length > 0) {
	var i = 0;
	var rounds = m[2];
	
	if(m[2] > 1) {
		while(i < rounds){
		var i2 = 0;
		while(i2 < all_lat_length) {
			if(m[0][i] == all_lat[i2]){m[0].splice(i,1);m[1].splice(i,1);m[2]--;}
			i2++;
			}
		i++;
		}
	}
	else {
		var i2 = 0;
		while(i2 < all_lat_length) {
			if(m[0] == all_lat[i2]){m[0] = '';m[1] = '';m[2]--;}
			i2++;
			}			
		}
	}	
	
		
	console.log(m[2]);	
	if(m[2] > 1) {	var i = 0;while(i < m[2]){insert_marker(m[0][i],m[1][i]);i++;}	}	
	if(m[2] == 1) {insert_marker(m[0],m[1]);}
	
	if(m[2] > 0) {mgr.addMarkers(allmakers,13);mgr.refresh();}
	
}	

function get_and_set(sw_lat,sw_lng,ne_lat,ne_lng){
	$.ajax({
		url: "c4.php",
		type: "POST",
		data: "swlat=" + sw_lat + "&swlng=" + sw_lng + "&nelat=" + ne_lat + "&nelng=" + ne_lng,
		success: function(data){
		if(data != "empty") {
			var data1 = (data).split("*");
			if(data1[2] > 1) {
			var lat = (data1[0]).split("|");var lng = (data1[1]).split("|");
			lat.pop();
			lng.pop();
			} else {
			var lat = data1[0];
			var lng = data1[1];
			}		
			var m = [];
			m.push(lat);
			m.push(lng);
			m.push(data1[2]);

			process_markers(m);
			}
		}		
	});
}
	
	var s_sw_lat = s_sw.lat();
	var s_sw_lng = s_sw.lng();
	var s_ne_lat = s_ne.lat();
	var s_ne_lng = s_ne.lng();
	
	var mgrOptions = {borderPadding: 25};
	var mgr = new MarkerManager(map,mgrOptions);
	
	get_and_set(s_sw_lat,s_sw_lng,s_ne_lat,s_ne_lng);		


GEvent.addListener(map, "dragend", function() {
		var after_bounds = map.getBounds();
		var a_sw = after_bounds.getSouthWest();
		var a_ne = after_bounds.getNorthEast();
		var a_sw_lat = a_sw.lat();
		var a_sw_lng = a_sw.lng();
		var a_ne_lat = a_ne.lat();
		var a_ne_lng = a_ne.lng();
				
		get_and_set(a_sw_lat,a_sw_lng,a_ne_lat,a_ne_lng);
		
	});


К карте привязан listener, то есть, после перетаскивания карты, проверяются вытащенные из базы маркеры с уже теми, что есть на карте и удаляются те, которые уже есть на карте.

Оставшиеся в массиве маркеры, если такие будут, наносятся на карту и добавляются в общий массив маркеров.

Только вот проблема в том, что при перетаскивании иногда происходит вот такое, хотя в базе координат всего на 5 маркеров:

screenshot

У меня почему то проскакивает m[2] в виде единицы, хотя должен быть 0, если на карте уже есть такой маркер.

Помогите пожалуйста разобраться, где я ошибся.

Может в скрипте присутствуют лишние вычисления? Если да, то как их сократить?

Последний раз редактировалось Octane, 05.10.2009 в 20:23. Причина: большое изображение
Ответить с цитированием
  #20 (permalink)  
Старый 05.10.2009, 20:42
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 23:36
Ajax ограничение по расширениям фото. t0xas AJAX и COMET 8 13.08.2009 11:29
AJAX и history браузера Shasoft jQuery 5 25.06.2009 16:22
Объясните как вызывается ajax скрипт AddressBook из формы prog90 AJAX и COMET 3 06.06.2009 16:12
Ajax - JSON - не распознает пришедший ответ Майский Кот jQuery 1 14.05.2009 00:40