1

AJAX リクエストを機能させようとしています。具体的には、私がこれを正しく行っていることを知るために、コンソールに各変更を記録したくありません。コードは以下のとおりです。

function loadAJAX() {
ajaxRequest = new XMLHttpRequest();
ajaxRequest.onreadystatechange = readyStateSwitch(ajaxRequest.readyState);
function readyStateSwitch(x) {
    switch(x) { 
        case 0: ajax0(); break;
        case 1: ajax1(); break;
        case 2: ajax2(); break;
        case 3: ajax3(); break;
        case 4: ajax4(); break;
        default: console.log("no arg"); break;
        }
    }
function ajax0() {
    console.log("0")
    }
function ajax1() {
    console.log("1")
    }
....
ajaxRequest.open("GET", "index.php", true);
ajaxRequest.send();
}

これでコンソールに 0 ~ 4 が出力されると思いますが、0 しか返されません (初期化されていません)。何か案は?

4

2 に答える 2

6

ハンドラーとしてアタッチするのではなくreadyStateSwitch、現在の Ajax リクエスト (0) を渡して関数を呼び出しています。次のように変更します。readyStateonreadystatechange

function loadAJAX() {
    function readyStateSwitch() {
        console.log(ajaxRequest.readyState);
    }
    var ajaxRequest = new XMLHttpRequest();
    ajaxRequest.onreadystatechange = readyStateSwitch; //passes a func reference
    ajaxRequest.open("GET", "index.php", true);
    ajaxRequest.send();
}

Demo

ps。varグローバル変数を誤って作成しないように追加し、ロジックを少し簡素化しました。

于 2013-06-04T13:17:38.300 に答える