我正在使用Google Map JS APIv3返回的DirectionsDisplay来获取某些位置的坐标。 DirectionsDisplay具有返回值(TextView
和lat()
)的函数,但我需要将它们发送到由lng()
序列化的PHP,因此我将值分配给新变量(JSON.stringify
和cLat
):
cLon
var steps=directionsDisplay.getDirections().routes[0].legs[0].steps;
for(var i=0;i<steps.length;i++){
steps[i].end_location.cLat = steps[i].end_location.lat();
steps[i].end_location.cLon = steps[i].end_location.lng();
}
按预期显示console.log(steps)
和cLat
:
cLon
但是,Object {steps: Array[8]}
steps: Array[8]
0: Object
distance: Object
duration: Object
encoded_lat_lngs: "..."
end_location: _.L
cLat: 64.49756909999999 //here
cLon: 14.148118999999951 //here
lat: function()
lng: function()
__proto__: _.L
...
会显示:
console.log(JSON.stringify(steps))
我做错了什么?
答案 0 :(得分:3)
查看json2.js中的相关部分:
// If the value has a toJSON method, call it to obtain a replacement value.
if (value && typeof value === 'object' &&
typeof value.toJSON === 'function') {
value = value.toJSON(key);
}
start_location
和end_location
确实有方法toJSON
,因此这些属性将设置为JSON.stringify()
一种选择是完全覆盖start_location
和end_location
for(var i=0;i<steps.length;i++){
steps[i].end_location= {
clat:steps[i].end_location.lat(),
cllng:steps[i].end_location.lng()
};
steps[i].start_location= {
clat:steps[i].start_location.lat(),
clng:steps[i].start_location.lng()
};
steps[i].end_location.cLon = steps[i].end_location.lng();
}
但是没有必要这样做(当API需要再次访问这些属性时也可能存在问题。)
正如您在字符串化steps
中看到的那样,它们已经包含了所需的信息(lat
和lng
),只需在PHP脚本中使用它们而不是自定义属性。