電子書籍の厳選無料作品が豊富!

Ajaxのプログラムを一つのオブジェクトにまとめてみようと思ってやってみたのですが、
>エラー: プロパティ 'readyState' の値を取得できません: オブジェクトは Null または未定義です。
などと表示されて上手く行きません。
何が悪くてエラーが出るのかが理解出来ていません。
詳しい方、エラーの原因・解決方法を教えてください。お願いします。


php側
echo "test";

javascript側
//--------------------------------------------------------------------
//てすとオブジェクト
//--------------------------------------------------------------------
var Test = function() {// メンバ変数の定義
this.request = "";

this.query = "test";// クエリ
this.response = "";// レスポンス
};
Test.prototype = {// プロトタイプの定義
/*データ送信*/
tSend : function() {
if(this.query) {
this.request = this.ajaxRequest();
this.request.onreadystatechange = this.tLoad;
if(this.query) {
this.request.open("POST", "./index.php", true);
this.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
this.request.send(this.query);
}
}
},

/*データ受信*/
tLoad : function() {
if((this.request.readyState == 4) && (this.request.status == 200)) {
alert("test");
}
},

/*HTTP通信用*/
ajaxRequest : function() {
var value = null;
try {
value = new XMLHttpRequest();
} catch(e) {
try {
value = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
value = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
return null;
}
}
}
return value;
}
};

//-----------------------------------------------------------------------
//実行
//-----------------------------------------------------------------------
var Test = new Test();// 通信用オブジェクトの生成
Test.tSend();// データ送信

A 回答 (2件)

ちなみに MSXML2 接頭辞を使うときはバージョンを明示しろと IE の中の人が忠告しており(でないと 3.0 と看倣される)



また、Microsoft 接頭辞は IE の中の人がメンテナンスしてないのでもう使うなと言っている。

http://blogs.msdn.com/b/xmlteam/archive/2006/10/ …
    • good
    • 0
この回答へのお礼

ありがとうございます。
おかげで上手く動きました!

その他、細かい知識までありがとうございます。

お礼日時:2013/02/24 00:28

onreadystatechange の this は XMLHTTPRequest



if((this.request.readyState == 4) && (this.request.status == 200)) {

if((this.readyState == 4) && (this.status == 200)) {

関数に代入する場合はスコープが変化するため注意が必要。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!