2013-12-18 2 views
0

Я использую JQuery, чтобы получить JSON из следующего URL:JQuery для анализа данных и получить лат и LNG и вставить в Google Maps`

http://api.chartbeat.com/live/geo/v3/?apikey=fakekeytoshowtheurl&host=example.com 

Вот пример JSON я получаю:

"lat_lngs": [[25, -80, 9], [26, -80, 6], [27, -80, 1], [29, -98, 2], [29, -95, 7], [30, -97, 3], [33, -117, 6], [33, -112, 25], [33, -111, 33], [34, -112, 1], [34, -111, 1], [36, -109, 1], [38, -97, 2], [40, -73, 1], [42, -78, 2]] 

Я пытаюсь использовать jQuery и получить каждый из lat_lngs и запустить функцию.

Вот код, который у меня есть, который не работает.

function addMarker(latitude, longitude) { 
    marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(latitude, longitude), 
     map: map 
    }); 
} 

$.get('http://api.chartbeat.com/live/geo/v3/?apikey=fakekeytoshowtheurl&host=example.com', function(data) { 
    $.each(data['lat_lngs'], function() { 
     var latlng = data['lat_lngs'].split(','); 
     addMarker(latlng[0], latlng[1]); 
    }) 
}); 

Это не работает, я получаю сообщение об ошибке сказав объект [объект массива] не имеет какого-либо метода «расколоть», и независимо от того, что я пытался, я не могу получить что-нибудь работать. Я просто хочу захватить первые два числа из всех lat_lngs, которые перечислены, и запустить функцию addMarker (lat, long).

У кого-нибудь есть идеи?

+0

Зачем вам использовать .split? ваш код не имеет большого смысла. Вы все еще работаете с 'data' внутри каждой, а не с каждой записью в данных, которые вы повторяете. –

+0

Проблема в том, что каждый из lat_lngs является его собственной сущностью, поэтому, например, я сделал alert lat_lngs [0], чтобы посмотреть, что я получу, и я получил первый полный набор чисел. –

+0

Справа. Но .split - это разделение строки на массив. 'data ['lat_lngs']' уже является массивом. –

ответ

2
$.each(data['lat_lngs'], function(index, value) { 
    addMarker(value[0], value[1]); 
}) 

Объяснение: data['lat_lngs'] это массив массивов. Когда вы перебираете его с помощью $.each, каждая итерация получает в качестве своего value один элемент массива data['lat_lngs'].

И каждый элемент представляет собой массив. (Не строка! Нет необходимости в split() что угодно.)

$.each также устанавливает значение this равным значению текущей итерации. Таким образом, вы могли бы сделать это также:

$.each(data['lat_lngs'], function() { 
    addMarker(this[0], this[1]); 
}) 
+0

Это сработало! Я должен буду помнить, что в следующий раз мне нужно сделать что-то вроде этого :) Как только я смогу, я помету это как ответ –