2013-04-12 89 views
2

我有以下問題代碼是更進一步。 當我這樣做我的數組未定義

city[i] = response[i].name; 

我可以打印出每個城市我的每一個名字。但現在我想有一個多維數組,因爲我也想保存下面的代碼

L.marker([response[i].lat, response[i].lon]).bindPopup(response[i].name); 

而且我認爲我可以將它保存在一個多維數組,所以當我們作爲一例

city[1]["CityName"] = "New York" 
city[1]["Locations"] = L.marker([location]).bindPopup(name); 

所以,現在當我打電話city[1]['Locations']我得到L.Marker,對吧?

這這裏是我的代碼

function init() 
{ 
region = 'all'; 
var url = "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", 
    attribution = "(c) OSM contributors, ODBL"; 

var minimal = L.tileLayer(url, {styleID: 22677, attribution: attribution}); 
$.ajax 
({ 
    type: 'GET', 
    url: 'webservice.php', 
    data: {region: region}, 
    success: function(response, textStatus, XMLHttpRequest) 
    { 
     var city = new Array(); 
     var lygStr = ''; 
     for(var i = 0; i < response.length; i++) 
     { 
      //alert(response[i].lat + " | " + response[i].lon + " | " + response[i].name); 
      alert(response[i].name); 
      city[i]["CityName"] = response[i].name; 

      //L.marker([response[i].lat, response[i].lon]).bindPopup(response[i].name); 
      if(i + 1 == response.length) 
      { 
       lygStr += city[i]["CityName"]; 
      } 
      else 
      { 
       lygStr += city[i]["CityName"] + ", "; 
      } 
     } 
     alert("Test" + lygStr); 
     var cities = L.layerGroup([lygStr]); 

     map = L.map("map1", 
     { 
      center: new L.Latlng(resposne[1].lat, response[0].lon), 
      zoom: 10, 
      layers: [minimal, cities] 
     }); 
    } 
}); 

} 
+0

http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript – gearsdigital

回答

2

正確的初始化即可解決此問題 - 你需要初始化在city[i]位置的對象是持有自己的價值,而不是不確定的對象。你想要一個對象而不是數組。數組只能有數字索引,而對象可以有你想要的標識符。

city[i]['Location'] 
    // same as 
    city[i].Location 
+0

你是什麼城市?[我] = []?當我讓它一切,但初始化數組,如你所說,我仍然在這一行'城市[我] [「城市名稱」] =響應[i] .name;' – devShuba

+1

@devShuba這是一個錯誤,你需要一個對象'{}'而不是數組''''。 – Christoph

-1

您使用city[i]作爲數組不斷宣稱它是這樣前:

var city = []; // don't use the new Array(); syntax 
var lygStr = ''; 

for(var i = 0; i < response.length; i++) { 
    // before using city[i] as an array, you must declare it as an array 
    city[i] = [];  

    city[i]["CityName"] = response[i].name; 
    ... 
+0

謝謝,這有幫助! – devShuba

+0

實際上應該在這裏使用一個對象而不是數組。 – Christoph

+0

@Christoph數組就是原始代碼中使用的數組。 – jbabey

0

它看起來像在這條線:

city[1]["Locations"] = L.marker([location]).bindPopup(name); 

city[1]["Locations"]將被設置爲無論.bindPopup(name)返回。這可能是undefined或者它可能是一個函數。該方法構造爲返回其調用的對象嗎?怎麼樣只是這樣的:

city[1]["Locations"] = L.marker([location]); 
city[1]["Locations"].bindPopup(name); 
+0

這是一個簡單的初始化問題;) – Christoph