初めて投稿します。
よろしくお願いします。
こちらの存在を知らなかったので、OKWAVE(
http://okwave.jp/qa5278821.html)のほうにも同じ内容で投げていま
す。
マルチになってしまって申し訳ないですが、より専門的に回答をいただきたかったので、こちらにも投稿させてください。
内容は、OKWAVEの内容と同じになります。
ユーザーがフォームから住所や噴出しの内容などを入力して、動的にマーカーを置くスクリプトをPHP+JSで作りました。
テストでちまちまと表示する分には問題なかったのですが、本番のデータ(最終的に100~200程度になるようです)
を投入したところ、10件目までは問題なかったのが、10件を境に、表示されるもの、されないものがでてきました。
なんとなく原因は、処理よりも表示のほうが速いからではないか?ということなんですが、JSの処理の流れがイマイチわかっていないので、結論は出せませ
ん。(そもそもそんなことがおきるのか?処理が終わるまでまってくれないんだろうか)
実際20件登録したところ、10件~17件の間で出たり出なかったりします。1~10件までは必ず表示され、その後ろのIDを持つものがランダムになり
ます。
PHPの配列をJSに置き換えて、多次元連想配列を作って、最後にgooglemapという関数に投げています。
HTMLソースを見ると、20件分の配列が出てしまうので、もっとスマートなやり方がよかったんですが、
JSはあまり書きなれていないことと、時間がなかったのでこういう形になりました。
ひとまず、見た目云々は置いといて、入力したデータすべてが反映されるようにしたいです。
下記のソースで直したほうがよいところはありますか?
sleepをかけるとか、ajaxにするとか、何か解決策はないでしょうか。すみませんが、よろしくお願いします。
切り分けとして、アイコンをデフォルトにしてみたのですが、それが原因ではありませんでした。
geocoder.getLatLngのpoint.lat();をalertしても、10回程度しか出ませんでした。
(もっといろんなところでアラートしてどこでおかしくなってるか確認すればよかったですね。
今家からなので、明日もっと触ってみようとは思ってますが、納期的に時間がないのですみません)
var markers = new Object();
var marker = new Object();
marker["name"] = "xxx";
marker["icon"] = "ylw-pushpin";
marker["address"] = "座標変換用の住所";
marker["text"] = "噴出しの中身";
marker["center"] = "中心にするかしないか";
markers[0] = marker;
20回ループ
markers[20] = marker;
googlemap(markers)
-----------googlemap(markers)
function googlemap(markers) {
if (GBrowserIsCompatible()) {
geocoder = new GClientGeocoder();
map = new GMap2(document.getElementById("map"));
map.addControl(new GSmallZoomControl());
map.addControl(new GScaleControl());
for(var i in markers){
showAddress(markers[i]);
//ここは20回ちゃんとまわってるようです
}
}
}
------------------showAddress()
function showAddress(amarker) {
if (geocoder) {
geocoder.getLatLng(
amarker['address'],
function(point) {
if(amarker['center'] == 1){
map.setCenter(point, 12);
}
//アイコンが指定されてたらアイコンを設定
if(amarker['icon']){
//~アイコン関係は長いので割愛
var marker = new GMarker(point,micon);
}else{
var marker = new GMarker(point);
}
//アラートしてみると、ここが10回~17回ぐらいしか回ってない
map.addOverlay(marker);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(ふきだしのなかみ) });
}
);
}
}