1

ここにAJAX noob...したがって、以下のこのコードは、onclickイベント中に呼び出されて機能します。

function updateText() {
  var http = getHTTPObject();    
  http.open("GET","ajax_info.asp",true);
  http.onreadystatechange = function() {
    if (http.readyState == 4) {
      document.getElementById("myDiv").innerHTML=http.responseText; 
    }
  }
  http.send();      
}

しかし、以下のように掃除しようとすると、うまくいきません。以下のコードは正しいコールバック構文ではありませんか?

function handleHTTPResponse() {
  if (http.readyState == 4) {
    document.getElementById("myDiv").innerHTML=http.responseText;
  }
}

function updateText() {
  var http = getHTTPObject();    
  http.open("GET","ajax_info.asp",true);           
  http.onreadystatechange = handleHTTPResponse;
  http.send();
}
4

2 に答える 2

2

関数は変数がhandleHTTPResponse()何であるかを知りません。httpその名前のスコープで宣言された変数はありません。

引数として渡す

function handleHTTPResponse(http) {
    if (http.readyState == 4) {
        document.getElementById("myDiv").innerHTML=http.responseText;
    }
}

...

http.onreadystatechange = function() { handleHTTPResponse(http) };

または、他の回答で@dc5が指摘したように、使用しますthis

http.onreadystatechange = function() { handleHTTPResponse(this) };

または同等にクリーン

function handleHTTPResponse() {
    if (this.readyState == 4) {
        document.getElementById("myDiv").innerHTML=this.responseText;
    }
}

...

http.onreadystatechange = handleHTTPResponse;

または、関数をスコープに入れて「見る」ことができるようにしますhttp

function updateText() {

    function handleHTTPResponse() {
        if (http.readyState == 4) {
            document.getElementById("myDiv").innerHTML=http.responseText;
        }
    }

    var http = getHTTPObject();    
    http.open("GET","ajax_info.asp",true);           
    http.onreadystatechange = handleHTTPResponse;
    http.send();
}

または、httpグローバルにする

var http;    

function handleHTTPResponse() {
    if (http.readyState == 4) {
        document.getElementById("myDiv").innerHTML=http.responseText;
    }
}

function updateText() {
    http = getHTTPObject();    
    http.open("GET","ajax_info.asp",true);           
    http.onreadystatechange = handleHTTPResponse;
    http.send();
}
于 2013-09-14T22:46:02.397 に答える
1

コールバックは変数にアクセスできませんがhttp、呼び出されると、そのコンテキストは変数が参照している値になります。

コールバックを使用するように変更しますthis:

function handleHTTPResponse() {
    if (this.readyState == 4) {
        document.getElementById("myDiv").innerHTML=this.responseText;
    }
}
于 2013-09-14T22:50:13.223 に答える