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= 4name=1 data=data1name=2 data=data2name=3 data=data3name=4 data=data4

IEでの実行結果

length= 5name=1 data=data1name=2 data=data2name=3 data=data3name=4 data=data4

配列の長さがFireFoxは4、IEは5になっています。データは4つしかありませんので、IE上でランタイムエラーが発生し、エラーダイアログが表示されます。

どこが悪いのかというと、さらっと見ただけではわかりませんが、dataArrayの最後に「カンマ」が付いています。

{'name':'4','data':'data4'},

ではなく

{'name':'4','data':'data4'}

にする必要があります。

カンマを取ると、IEでもFireFoxでも長さは4となり正常に動作するようになります。
これで1時間程時間をつぶしました。お気をつけください。


コメント

このブログの人気の投稿

ドローンプログラミング体験教室を伊豆大島の小学校でしてきました

iBatisで動的SQL

情報処理安全確保支援士登録証のカード型が届きました。