我使用http://maps.google.com/maps/api/js?sensor=false来检索地址的纬度和经度。
在从google检索数据时,我将lats和lng存储到数组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。从本世纪初开始,我就开始使用它了--顺便说一句,我不知道该怎么称呼它。90年代就是90年代。这些是10号吗?0?
无论如何,IE,FF和Safari的代码运行良好,但我已经尝试了所有我能想到的Opera,它就是不会把标记看作一个对象。
我已经从results div中复制了构造的字符串,并对其进行了硬编码,以查看它在opera中是否能正常工作,这是完全没有错误的。
我也尝试过:
for(index in myLat)
{
markers[index].lat = myLat[index];
markers[index].lng = myLng[index];
markers[index].name = schoolNameArray[index];
}我收到错误,从无法将markersindex转换为对象到未捕获的异常: RangeError:超过最大递归深度
下面是我使用的测试数据:
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返回的svgs的一些警告和FF中的一些css警告,但都是0错误。IE抱怨谷歌没有返回地址,但我会在Opera中修复这个问题后,为谷歌输入某种类型的try and catch代码。
我还尝试将字符串发送到函数并返回计算结果,但到目前为止都没有成功。
提前感谢,我希望我已经遵守了在这个论坛上发帖的所有规则。
发布于 2011-08-06 06:18:47
这
for(index in myLat){
markers[index].lat = myLat[index];
markers[index].lng = myLng[index];
markers[index].name = schoolNameArray[index];
}应该是
for(var i=0;i<myLat.length;i++){
markers.push({
lat: myLat[i],
lng: myLng[i],
name: schoolNameArray[i]
});
}发布于 2011-08-06 03:22:24
任何现代浏览器都会有自己的JSON解析器:
JSON.parse('{"hello": ".jpg"}')使用它,而不是eval
var points = {filled: false};
if(typeof(JSON) != undefined){
points = JSON.parse(jsonString);
points.filled = true;
}else{
alert('Come back after you upgrade your janky old browser');
}
if(points.filled){//get the data you want here也不需要浏览器检测。除非你真的想让那些IE6用户。
https://stackoverflow.com/questions/6961387
复制相似问题