调用javascript对象值会给我'undefined'

时间:2012-10-25 01:22:20

标签: javascript ajax json google-maps

我正在开发一个谷歌地图应用程序,我想从数据库加载一些标记并将它们显示在地图上。所以我创建了一个数组并定义了一个像这样的对象。

function shop_data(name,latitude,longitude,type)
    {
    this.name=name;
    this.latitude=latitude;
    this.longitude=longitude;
    this.type=type;
    }

然后我将从ajax请求中检索到的一些数据添加到'shop_data'对象数组中。该数组定义为'all_shops'。

var i=0;
for(var o in data){
var name = data[o].name;
    var type = data[o].type;
var lat = data[o].lat;
var lng = data[o].lng;

all_shops[i]=new shop_data(name,lat,lng,type);
i++
}

然后当我打电话给'all_shops [i] .name'时,它会给我一个名字。但是当我打电话给'all_shops [i] .lat'或'all_shops [i] .lng'时,它会给我'未定义'。我试过解析lat,lng也是。这里lat,lng是MySQL数据库中的双变量。 通过调用name,type,lat,lng,我可以从收到的ajax数据中获得lat,lng值而不会出现问题。但是当我把它们全部放在一个数组中并且从数组中调用它们时出现问题。任何帮助,将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:1)

改变
this.latitude=latitude;
this.longitude=longitude;

this.lat=latitude;
this.lng=longitude;

您有一个简单的复制/粘贴错误。

答案 1 :(得分:1)

您应该从latitude而非longitudeall_shops[i]致电latlng 因为你有像这样的shop_data函数定义

function shop_data(name,latitude,longitude,type)
{
   this.name=name;
   this.latitude=latitude;
   this.longitude=longitude;
   this.type=type;
}

或者如果想要使用latlng,则更改shop_data功能定义,如

function shop_data(name,latitude,longitude,type)
{
   this.name=name;
   this.lat=latitude;
   this.lng=longitude;
   this.type=type;
}

答案 2 :(得分:1)

更改变量名称以匹配并进行一点清理:

function shop_data(name,latitude,longitude,type){
    this.name=name;
    this.lat=latitude;
    this.lng=longitude;
    this.type=type;
}

var i=0;
for(var o in data){
    var name = data[o].name;
    var type = data[o].type;
    var lat = data[o].lat;
    var lng = data[o].lng;

    all_shops[i]=new shop_data(name,lat,lng,type);
    i++
}