2010年02月22日

'list[...].1' は Null またはオブジェクトではありません。

Google Maps でマーカーを地図に植えていく作業、つまり配列を厳密に正確に書き込む作業が大変なので、PHP から MySQL につないで、配列を自動的に書いてもらい Google Maps を動かしている JavaScript に渡してしまえば楽できると思い立った。

でやってみたら、案外簡単だった。普通にデータベースに接続して、配列の前後の部分は手書きして、配列データ自体は Echo 文で慎重に「 [ 」やら「 ] 」やら「 ' 」やら、決められた記号を書いた間に、データを出力させればできてしまった。これは結構拍子抜け。

でもこれで終わりではなかった。Google Map を何度も表示させているうちにブラウザ左下隅の「びっくりマーク」に気がつく。これをクリックすると

「メッセージ: 'list[...].1' は Null またはオブジェクトではありません。」

という謎のメッセージ。

早速検索を何度もかけて、原因を調べてみる。

どうも、配列を作るときに各行の末尾に「 , 」記号をつけるのだけれど、最後の行だけはつけてはいけないと。これをつけると Internet Explorer の場合、くだんの警告を発するようになるとのこと。Web は有難い。一生懸命調べればちゃんと教えてくれる。

「 , 」をつけると、配列でもう1行できるが、これに入れるデータはもはやないから中身が NULL のデータができてしまうのだ。

解決策をいろいろ考えて、データをデータベースからごっそり取り出したときに行数を数えて、その行数に達したら、データを書き込むループ内で分岐することにした。つまり、

$rs として結果を取得したら

$last_loop = mysql_num_rows($rs);

としてループの行数を調べる。

$loop_count = 1;

として、ループを開始する。そしてこのループカウントを1ずつ増やしながら、判別式として

if ( $loop_count < $last_loop )

を使って、最後の行に来たのを調べる。それで「 , 」が行末にないバージョンで最後の行だけ出力する。

これで警告マークは解決。
posted by Remora at 16:57| Comment(0) | Google Maps | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。