parseJSONをはずしたらうまくいくが・・・
サーバーからMAP上に表示するマーカーをJSON形式でとってきて、json.jsライブラリのparseJSONでオブジェクトに変換するようにしていたが、Firefoxの拡張機能:FireBugにエラーが出るようになった。ソース↓
GDownloadUrl( "list3.php?since="+encodeURIComponent(since), function(listdata){ //var obj = listdata.parseJSON(); var obj = eval('(' + listdata + ')'); var lastModif = obj.time; var markers = obj.list;
parseJSONしているところをコメントにして、evalでとるようにし、HTML側で外部参照しているjson.jsをコメント化するとエラーが出ない。他のソースで試してみると。HTMLファイルが↓
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="http://maps.google.co.jp/maps?file=api&v=2&key=Your API KEY" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" src="json.js"></script> <script type="text/javascript" src="sample.js" charset=utf-8"></script> </head> <body> <div id="mymap" style="width: 500px; height: 400px"></div> </body> </html>
で、
var map; function startUp() { map = new GMap2( document.getElementById("mymap") ); GDownloadUrl( "center.json", mySetCenter ); function mySetCenter(data) { var obj = data.parseJSON(); map.setCenter( new GLatLng(obj.lat, obj.lng), obj.zoom ); } } onload = startUp; onunload = GUnload;
↑のように、JSONデータを取得し、MAPを表示するのみであれば、エラーは出ないが、
var map; function startUp() { map = new GMap2( document.getElementById("mymap") ); GDownloadUrl( "center.json", mySetCenter ); function mySetCenter(data) { var obj = data.parseJSON(); map.setCenter( new GLatLng(obj.lat, obj.lng), obj.zoom ); } GEvent.addListener(map, "dblclick", function(ov, latlng){ addEditableMarker(undefined, latlng); }); } function addEditableMarker(id, latlng){ var mk = new GMarker(latlng); map.addOverlay(mk); } onload = startUp; onunload = GUnload;
ダブルクリックしたときに、マーカーを表示する処理を追加した場合に、「Bd(a, b, true).push is not a function」といったエラーが発生する。