【发布时间】:2011-08-05 19:06:00
【问题描述】:
我正在使用http://maps.google.com/maps/api/js?sensor=false 来检索地址的纬度和经度。
在从 google 检索数据时,我将 lats 和 lngs 存储到数组 myLat 和 myLng 中。
最终用户将地址连同建筑物的名称一起输入到文本区域,这些建筑物的名称也存储在他们自己的数组 schoolAddressArray 和 schoolNameArray 中。
我将结果放在一个名为 results 的 div 中 --
document.getElementById("results")
然后我将构造的字符串并使用 eval 将其转换为“类似 JSON”的对象。
PHP start
global $browser;
if(strpos($_SERVER["HTTP_USER_AGENT"], "Opera") !== FALSE)
{
$browser = "opera";
}
if(strpos($_SERVER["HTTP_USER_AGENT"], "MSIE") !== FALSE)
{
$browser = "msie";
}
if(strpos($_SERVER["HTTP_USER_AGENT"], "Firefox") !== FALSE)
{
$browser = "ff";
}
if(strpos($_SERVER["HTTP_USER_AGENT"], "Safari") !== FALSE)
{
$browser = "safari";
}
echo'
<script type="text/javascript">
<!--
var $whichBrowser = "'; echo $browser; echo'";
-->
</script>
';
PHP end
这是 JavaScript 开始的地方
var strlen = tempVar.length;
var myNewTempVar = tempVar.slice(0,strlen-2)+']';
document.getElementById("results").innerHTML = myNewTempVar;
if($whichBrowser == "msie")
{
//alert(document.getElementById("results").childNodes[0].nodeValue);
markers = window.eval(document.getElementById("results").childNodes[0].nodeValue);
}
else if($whichBrowser == "opera")
{
//markers = window.eval([getProperty(tempVar.slice(1,strlen-2))]);
//alert(markers);
//markers = [{ lat: 34.0878234, lng: -118.1543285, name: "1 school"}, { lat: 34.071239, lng: -118.1506133, name: "2 school"}, { lat: 34.1015362, lng: -118.1328816, name: "3 school"}, { lat: 34.098139499, lng: -118.1168382, name: "4 school"}, { lat: 34.0751855, lng: -118.1381771, name: "5 school"}, { lat: 34.0856624, lng: -118.1345840, name: "6 school"}, { lat: 34.0951319, lng: -118.1421722, name: "7 school"}, { lat: 34.0760016, lng: -118.1281349, name: "8 school"}, { lat: 34.0621694, lng: -118.1291052, name: "9 school"}, { lat: 34.0583261, lng: -118.1563075, name: "10 school"}, { lat: 34.046435, lng: -118.1524630, name: "11 school"}, { lat: 34.054128899, lng: -118.1280777, name: "12 school"}];
for(var myX=0;myX<myLat.length;myX++)
{
markers.push(["{ lat: "+myLat[myX]+", lng: "+myLng[myX]+", name: "+schoolNameArray[myX]+"}"]);
}
alert(markers);
}
else
{
markers = eval('('+myNewTempVar+')');
}
JavaScript 结束
如你所见,我使用的是 PHP 的
strpos($_SERVER["HTTP_USER_AGENT"]
找出最终用户正在使用什么浏览器,然后回显一些javascript来设置变量$whichBrowser。自 2000 年代初以来,这一直对我有用——顺便说一句,我不知道该怎么称呼它。 90年代就是90年代。这些是10岁吗? 0?
无论如何,IE、FF 和 Safari 的代码都可以正常工作,但我已经尝试了所有我能想到的 Opera,它只是不会将标记视为对象。
我已经从结果 div 中复制了构造的字符串并对其进行了硬编码,以查看它是否在 opera 中完全有效,它完全没有错误。
我也试过了:
for(index in myLat)
{
markers[index].lat = myLat[index];
markers[index].lng = myLng[index];
markers[index].name = schoolNameArray[index];
}
我收到了从无法将标记[索引] 转换为对象到未捕获异常的错误:RangeError: Maximum recursion depth exceeded
这是我正在使用的测试数据:
2821 W. Commonwealth Ave., Alhambra, CA
2001 S. Elm St., Alhambra, CA
110 W. McLean St., Alhambra, CA
100 S. Granada Ave., Alhambra, CA
1603 S. Marguerita Ave., Alhambra, CA
409 S. Atlantic Blvd., Alhambra, CA
301 N. Marengo Ave., Alhambra, CA
509 W. Norwood Pl., Alhambra, CA
120 S. Ynez Ave., Monterey Park, CA
400 Casuda Canyon Dr., Monterey Park, CA
1701 Brightwood St., Monterey Park, CA
650 Grandridge Ave., Monterey Park, CA
这是我的测试服务器的链接—— http://kronusproductions.com/mycarpaysme_ajax/test_street_view13.php
如您所见,在 IE、Safari 和 FF 中没有报告错误,但 Opera 是另一回事。
Safari 中针对 google 返回的 svg 的一些警告和 FF 中的一些 css 警告,但 0 错误。当 google 不返回地址时 IE 会报错,但在 Opera 中修复此问题后,我会输入某种 try and catch 代码供 google 使用。
我也尝试将字符串发送到函数并返回评估,但到目前为止没有任何效果。
在此先感谢,我希望我已按照所有规则在此论坛上发帖。
【问题讨论】:
-
不要在 javascript 数组上使用
for(index in myLat)。此外,使用eval几乎总是一个好兆头,表明您做错了什么。
标签: javascript json google-maps object opera