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