以下のJavaScriptが動きません。

FxやChromeでは動くのですがIE7/8ではうごきません。
prototype1.6.0.3を使用しています。
forを抜けた後のalertが動かず、困っています。アドバイスお願いいたします。

>||
function load(){
new Ajax.Request(prjlist, {method:'get',onComplete:displayResult});
}

function displayResult(req){
data = req.responseText.evalJSON();
html = '<div><form name=\"prjlist\">プロジェクト:<select id=\"template\" name=\"template\" onChange=\"selectprj()\"><option value=\"\" selected=\"selected\">選んでください</option>';
for(i=0;i<data.projects.length;i++){
html = html += '<option value=\"'+ data.projects[i].prjfile.escapeHTML() + '\">';
html = html += data.projects[i].name.escapeHTML() + '</option>';
alert (html); // ←このアラートは作動する。JSONのデータも文字列で受け渡している。
}
alert (html); // ←このアラートは作動しない…
html = html += '</select></form></div>';
}
||<

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/03/16 16:21:14
  • 終了:2010/03/16 17:24:26

ベストアンサー

id:kebo987654 No.1

kebo987654回答回数38ベストアンサー獲得回数102010/03/16 17:04:57

ポイント100pt

projects.json.projectsのコーディングを修正してみたらなおりました。

[
	{
	"name": "テスト1",
	"prjname": "test1",
	"prjfile": "test1.json"
	},
	{
	"name": "テスト2",
	"prjname": "test2",
	"prjfile": "test2.json"
	}	// コンマを取り除きました。
]

IE7/8では配列の最後にコンマを入れると配列の長さが1増える謎仕様になっているようです。

参考→Javascript: 配列初期化時の余分なカンマによる配列の要素数がブラウザにより異なる問題 - seclan のほえほえルーム

id:astrocyte

ありがとうございました!ちゃんと動きました。

ちゃんと、自分でJSON Validator等で確認しておけばよかったですね。。

勉強になりました。ありがとうございました。

2010/03/16 17:23:34
  • id:astrocyte
    一応jsonのデータもコメントしておきます。
    グローバル変数でprjlist='projects.json';として読み出しています

    --projects.json--
    {
    "projects": [
    {
    "name": "テスト1",
    "prjname": "test1",
    "prjfile": "test1.json"
    },
    {
    "name": "テスト2",
    "prjname": "test2",
    "prjfile": "test2.json"
    },
    ]
    }

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません