2010-03-05 2 views
0

У меня есть карта с 4 слоями, каждый слой имеет маркеры для различных магазинов. Мне нужно это сделать.jquery json parsing

  • Пользователь выбирает магазин из отборного
  • имени сценарий грейферов магазина, а затем находит правильные данные для этого магазина из JSON.

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

$('#shopselect').change(function() { 
    $.ajax({ 
    type: "GET", 
    url: "data.txt", 
    dataType: "json", 
    success: function(data) { 

    var selected = $('#shopselect option:selected').text() 

    if ($(".layer1:visible").length) { 
     $("#viewport").mapbox("center", { 
      x: shops." + selected + ".l1x, 
      y: shops." + selected + ".l1y 
     }); 
    } else if ($(".layer2:visible").length) { 
     $("#viewport").mapbox("center", { 
      x: shops." + selected + ".l2x, 
      y: shops." + selected + ".l1y 
     }); 
    } else if ($(".layer3:visible").length) { 
     $("#viewport").mapbox("center", { 
      x: shops." + selected + ".l3x, 
      y: shops." + selected + ".l1y 
     }); 
    } else if ($(".layer4:visible").length) { 
     $("#viewport").mapbox("center", { 
      x: shops." + selected + ".l4x, 
      y: shops." + selected + ".l1y 
     }); 
    } 
} 
}); 

Json выглядит так.

{ 
shops:{ 
    primark:{ 
     l1x:310, 
     l1y:132, 
     l2x:388, 
     l2y:264,    
     l3x:530, 
     l3y:355, 
     l4x:670, 
     l4y:450 
    }, 
    boots:{ 
     l1x:310, 
     l1y:132, 
     l2x:388, 
     l2y:264,    
     l3x:530, 
     l3y:355, 
     l4x:670, 
     l4y:450 
    }  
} 

}

ли кто-нибудь может мне точку в правильном направлении.

ответ

0

Вместо этого:

x: shops." + selected + ".l1x, 
y: shops." + selected + ".l1y 

А что-то вроде этого:

x: data.shops[selected].l1x, 
y: data.shops[selected].l1y 
+0

JSON в данных параметров функции, так что вам нужно использовать х: data.shops [выбрано] .l1x, Y: data.shops [выбрано] .l1y –

+0

@David: ergh, я сфокусирован на синтаксисе и не проверял переменные :-(Я отредактировал свой ответ, спасибо за ваш комментарий! –

+0

Спасибо, ребята. У меня все работает. – Trip

0

Предполагая, что значение, которое вы получите в:

var selected = $('#shopselect option:selected').text() 

(кстати вы забыли точка с запятой) является либо «primark», либо «boots», , вы должны иметь возможность доступа к данным этого wa у:

var coords = data.shops[selected]; 
if ($(".layer1:visible").length) { 
    $("#viewport").mapbox("center", { 
     x: coords.l1x, 
     y: coords.l1y 
    }); 

т.д.

0

Вы можете сделать что-то вроде этого, чтобы получить магазины:

var shops = data.shops; 

Правильный способ получить свойства магазин:

shops[selected].l4x 

Другими словами, рассматривайте магазины как ассоциативный массив.