我使用http://maps.google.com/maps/api/js?sensor=false來檢索地址的經度和緯度。Google地圖v3,JSON,對象和Opera
從google中檢索數據時,我將lats和lng存儲到數組myLat和myLng中。
最終用戶將地址輸入到textarea以及也存儲到自己的arrarys schoolAddressArray和schoolNameArray中的建築物名稱中。
我放在一個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年代。這是十幾歲嗎? 0s?無論如何,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:最大遞歸深度超過
下面是測試數據我使用:
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個錯誤。如果地址沒有被google返回,IE會抱怨,但是我會在Opera中解決這個問題之後,爲谷歌輸入一些try和catch代碼。
我已經嘗試將字符串發送到一個函數並返回評估,但沒有任何工作到目前爲止。
在此先感謝,我希望我已遵循發佈到此論壇的所有規則。
不要使用'對JavaScript陣列上(在myLat指數)'。另外,使用'eval'幾乎總是一個很好的跡象,表明你做的事情非常錯誤。 – dtanders