JavaScript非互換 JSONデータ
Ajax等はやっており、色々作成しているのですが、JSON (JavaScript Object Notation)データを扱っていて、JavaScriptでの配列の非互換性を発見しました。 データが悪いと言ってしまえばそれまでなのですが、JavaScriptを直すのではなく、データを直す必要があるので、原因を追究するのに時間がかかります。頭の隅にでもとどめておくと良いと思います。
サンプルコード
以下のソースをIEとFireFoxで実行してみると異なった結果となります。
<html>
<body>
<script language="JavaScript" type="text/javascript" >
<!--
var dataArray = [
{'name':'1','data':'data1'},
{'name':'2','data':'data2'},
{'name':'3','data':'data3'},
{'name':'4','data':'data4'},
];
var length = dataArray.length;
document.write("length= " + length);
document.write("<br/>");
for (var i=0; i<length;i++){
document.write(" name=" + dataArray[i].name);
document.write(" data=" + dataArray[i].data);
document.write("<br/>");
}
// --></script>
</body>
</html>
FireFoxでの実行結果
length= 4 name=1 data=data1 name=2 data=data2 name=3 data=data3 name=4 data=data4
IEでの実行結果
length= 5 name=1 data=data1 name=2 data=data2 name=3 data=data3 name=4 data=data4
配列の長さがFireFoxは4、IEは5になっています。データは4つしかありませんので、IE上でランタイムエラーが発生し、エラーダイアログが表示されます。
どこが悪いのかというと、さらっと見ただけではわかりませんが、dataArrayの最後に「カンマ」が付いています。
{'name':'4','data':'data4'},
ではなく
{'name':'4','data':'data4'}
にする必要があります。
カンマを取ると、IEでもFireFoxでも長さは4となり正常に動作するようになります。
これで1時間程時間をつぶしました。お気をつけください。




コメント
これはうまくいってしまう環境もあるのですね。
普通最後のコンマは無視してくれると思っていたので、何でエラーになるのか最初はまりました。サーバー側で最後のデータか注意しておかないといけないってことですね。
投稿者: noki | 2006年03月15日 01:01