如何通过Ajax调用生成Google Maps所需的嵌套数组?
问题解决:构建符合Google Maps API要求的嵌套数组
你的核心问题是把每个工匠的信息拼接成了字符串,而非真正的数组元素。当你将字符串推入tradies数组后,JSON.stringify会自动为每个字符串添加引号,导致格式不符合Google Maps API的要求。
修正后的代码
function getNearbyTradies(oArg){ var lat = oArg.lat || ""; var lng = oArg.lng || ""; var tradies = []; $.getJSON("cfcs/user.cfc?method=getNearbyUsers&returnformat=json&queryformat=column", {"lat":lat,"lng":lng},function(res,code){ if(res.ROWCOUNT > 0){ for (var i = 0; i < res.ROWCOUNT; i++) { var company_name = res.DATA.COMPANY_NAME[i]; // 接口返回的经纬度/ID可能是字符串,转成对应类型匹配Google示例格式 var tradieLat = parseFloat(res.DATA.LAT[i]); var tradieLng = parseFloat(res.DATA.LNG[i]); var trade_id = parseInt(res.DATA.TRADIE_ID[i], 10); // 直接创建数组,而非拼接字符串 var oTradie = [company_name, tradieLat, tradieLng, trade_id]; tradies.push(oTradie); }; var str = JSON.stringify(tradies, null, 4); alert(str); // 此时输出格式与Google示例完全一致 }; }); };
关键修改点
- 替换字符串拼接为数组创建:不再用引号拼接成字符串形式,而是直接创建包含四个元素的数组
[company_name, tradieLat, tradieLng, trade_id],这才是Google Maps API需要的嵌套数组结构。 - 数据类型转换:将接口返回的字符串类型经纬度转为浮点数,工匠ID转为整数,确保和示例中的数据类型(字符串+数字组合)完全匹配。
修正后的输出示例
[ ["Pan Plumbing Ltd", -36.9716195, 174.8620086, 120], ["Seal Plumbing", -36.9716195, 174.8620086, 121] ]
该格式可直接用于Google Maps API的地图标记渲染。
内容的提问来源于stack exchange,提问作者user460114
相关产品推荐
相关产品推荐

