1

我正在尝试使用 JSON 通过 Ajax 将谷歌地图选项对象保存到 MySQL 数据库,然后再次提取数据并将其解析回谷歌地图选项对象。我试图保存的基本选项似乎可以很好地保存和调用,除了 center 属性。我明白了

错误:属性值无效:[object Object]

这是原始选项对象的控制台转储的屏幕截图,后面是相同的数据,编码为 JSON,保存到数据库,再次从数据库中提取并解析回 JS 对象:

http://mcserver.gold.ac.uk/temp/gmapoptssave.png

(对不起,我是新手,不能在这里发图片)

我正在使用 json-jquery 插件的 jQuery.toJSON 函数将选项对象转换为 JSON,然后再通过 ajax 发送。在将数据发送回我的 JS 脚本之前,我正在使用 PHPs encode_json() 函数。

谁能告诉我我还应该做什么,或者我应该做些什么来让保存的选项数据恢复正常工作?我已经设法解决了这个问题

if(savedopts != '') mapopts = jQuery.parseJSON(savedopts);
    // This is a hack- should be able to use the parsed JSON object for center directly
    mapopts['center'] = new google.maps.LatLng(mapopts.center.$a, mapopts.center.ab);

但显然它并不优雅,我希望将来也能够保存其他类型的选项数据。

非常感谢任何提示,

干杯,

a|x

4

1 回答 1

0

并非 MapOptions 类型的所有属性都可以直接序列化。特别是,已知 LatLng 对象具有此限制(这是“中心”属性的类型)。相反,您需要使用 LatLng.toString() 或 LatLng.toUrlValue() 方法手动序列化该值,然后在从数据库中检索该值时重新创建 LatLng 对象。

存储

var optsToSave = mapopts;
optsToSave.center = mapopts.center.toUrlValue();
// store optsToSave in database

检索

var mapopts = jQuery.parseJSON(savedopts);
mapopts.center = new google.maps.LatLng(
    parseFloat(mapopts.center.substring(0, mapopts.center.indexOf(','))),
    parseFloat(mapopts.center.substring(mapopts.center.indexOf(',') + 1)));
于 2012-06-01T15:17:26.233 回答