2008年05月22日

JavaScriptがIEとOperaで動かない……原因はAjax.Requestのカンマ。

MOJI-Q 2.0、やっと完成して公開した〜と思ってたらIEとOpera(9.25)で動いていないことが判明。そういえばFirebugを見ながらFirefoxで作っていて、たまにOpera9.5でチェックしただけで他のブラウザは一切チェックしてませんでした。

まず、Firefoxでは大丈夫だけどIEとOperaではダメなものとして、JavaScriptのconstがありました。定数は使えないのか、残念、と思いながらすべてvarに変換。

それでもぜんぜん動かない……orz
IEはエラー行を教えてくれますが、行番号が合ってたり合ってなかったりでよくわかりません。Operaにいたっては完全にだんまり。仕方ないので、いったんすべてのJavaScriptをコメントアウトし、少しずつ表に出すことにしました。面倒で手間のかかる方法ですが確実です。

結局、こういうことでした。

new Ajax.Request('test.cgi',
{
    method: 'post',
    postBody: Form.serialize('form'),

    onSuccess: function(request)
    {
        // Do something
    },
    onComplete: function(request) {}, // ←これが原因
});

赤く書いた、Prototype.jsを使ったAjax.Requestの最後のカンマが原因です。以前はonCompleteの後にonFailureとか書いてあったものを消したので、区切りのカンマが残っていたわけです。そしてFirefoxではエラーにならないので、たった一文字のカンマに気がつくはずもなく。このカンマがあるとOpera9.25やIE7では動きません。

まとめ

  • JavaScriptのconstはFirefox(2.0)、Opera(9.5)では可、IE7、Opera(9.25)では不可。
  • Ajax.Request時のパラメータの最後に不要なカンマがあるとIE7、Opera(9.25)ではエラーになって動かない。Firefox(2.0)、Opera(9.5)、Safariでは問題ない。
  • JavaScriptマジめんどくさい。
この記事へのコメント
new Ajax.Request('test.cgi',
{
method: 'post'
, postBody: Form.serialize('form')
, onSuccess: function(request)
{
// Do something
}
, onComplete: function(request) {}
}
みたいな感じに書いていくのをおすすめします。あまり見映え良くないけどミスは減るはず。
Posted by 通りすがり at 2008年05月24日

コメントどうもです。なるほど、確かにその書き方ならカンマがあるかわかりやすいし、どこかを削除しても問題ないですね。書き方ってのは思いつきませんでしたー。
Posted by kazina at 2008年05月24日

コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック