2010/06/07

ブラウザ:: createXMLHttpRequest関数におけるIEとFFで違った挙動

AJAXのcreateXMLHttpRequest関数を使ってサーバ・クライアント間を通信した際、IEとFireFoxで違った挙動をした件があったのでメモ。
開発をFirefoxメインでやっていたので気が付かなかったんですが、下記関数のcbFuncを指定しないとIEでエラーになりました。

確認したところ、Firefox、Opera、Safari、Google Chrome(全て最新)では引数のcbFuncが無くても動作します。
記述ミスでも動くのはいいんですが、やっぱりしっかり書かないとダメですよね、こういうの・・・

★createXMLHttpRequest関数
function createXMLHttpRequest(cbFunc){
    var XMLhttpObject = null;
    try{
        //Firefox, Opera, Safari
        XMLhttpObject = new XMLHttpRequest();
    }catch(e){
        try{
            //IE6~?
            XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
            try{
                //IEその他
                XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");
            }catch(e){
                return null;
            }
        }
    }
    if(XMLhttpObject){
        XMLhttpObject.onreadystatechange = cbFunc;
    }
    return XMLhttpObject;
}

★動作させたスクリプト
NG -> createXMLHttpRequest();
OK -> createXMLHttpRequest(function(){})
※空の関数か、コールバックする関数を入れないとダメとうわけですね。
スポンサーリンク

スポンサーリンク