JQuery, вызывающий данные json для карты визуализации Google, не будет использовать значения json в $ .each. - PullRequest
1 голос
/ 06 декабря 2011

Json:
[{"latitude":"42.658673","longitude":"-73.810479","place":"Bethany Reformed Church"}]

Полная функция:
google.load("visualization", "1", {packages:["map"]});

    $(function() {
     // when document loads, grab the json
     $.getJSON('places.json', function(data) {
         // once grabbed, we run this callback

         // setup the new map and its variables
         var meetings = new google.visualization.DataTable();
             meetings.addRows(data.length);  // length gives us the number of results in our returned data
             meetings.addColumn('number', 'latitude');
             meetings.addColumn('number', 'longitude');
             meetings.addColumn('string', 'place');

         // now we need to build the map data, loop over each result
         $.each(data, function(i,v) {
             // set the values for both the location and place
             alert(i + ":" + v.latitude + ":" + v.longitude + ":" + v.place);
             // The alert displays the correct values
             meetings.setValue(i, 0, v.latitude);
             meetings.setValue(i, 1, v.longitude);
             meetings.setValue(i, 2, v.place);
             //the code stalls and nothing else gets executed
         });
         // finally, create the map!
         var map = new google.visualization.Map(document.getElementById('map_div'));
         map.draw(meetings, {showTip: true, mapType: 'normal'});

     });
   });

Если я предупреждаю () значения json внутри $ .each, они верны, но код останавливается, когда значения json находятся в встречи .setValue (). Я пришел к такому выводу, потому что, если я поставлю предупреждение после встречи. SetValues, ничего не появится.

Вывод оповещения:

0:42.658673:-73.810479:Bethany Reformed Church

Если я жестко закодирую фактические местоположения в встречи. SetValue (), он правильно отображает местоположение.

Как это:

$.each(data, function(i,v) {
             // this maps the location correctly
             meetings.setValue(i, 0, 42.658673);
             meetings.setValue(i, 1, -73.810479);
             meetings.setValue(i, 2, 'Bethany Reformed Church');
 });

Почему код, похоже, зависает в $ .each, когда используются переменные json?

Я использовал это в качестве руководства: Совместное использование jQuery, JSON и Google Geo API визуализации

1 Ответ

1 голос
/ 06 декабря 2011

Когда вы жестко его кодируете, вы используете числа:

setValue(i, 0, 42.658673);

, но в вашем JSON есть строки:

"longitude":"-73.810479"

Поэтому попробуйте изменить JSON для отправки чисел:

"longitude":-73.810479

или преобразуйте строки в числа, прежде чем отправлять их на setValue:

meetings.setValue(i, 0, +v.latitude);
meetings.setValue(i, 1, +v.longitude);

Унарный + преобразует строку в число.Для более явного преобразования используйте конструктор Number (но вызывается без new).

meetings.setValue(i, 0, Number(v.latitude));
meetings.setValue(i, 1, Number(v.longitude));
...