« iBatis-sqlMapファイル内内に<>の記号を記述する | メイン | Tapestry JavaScript (3) »

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時間程時間をつぶしました。お気をつけください。

トラックバック

このエントリーのトラックバックURL:
http://www.taosoftware.co.jp/mt/mt-tb.cgi/20

コメント

これはうまくいってしまう環境もあるのですね。

普通最後のコンマは無視してくれると思っていたので、何でエラーになるのか最初はまりました。サーバー側で最後のデータか注意しておかないといけないってことですね。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)