AJAX onreadystatechange没有调用

Jam*_*uss 1 javascript ajax

我正在尝试使用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();
}
Run Code Online (Sandbox Code Playgroud)

我希望在我的控制台中打印出0-4,但它只返回0(未初始化).有任何想法吗?

Fab*_*tté 6

您正在调用readyStateSwitch函数立即传递当前Ajax请求readyState(即0)而不是将其作为onreadystatechange处理程序附加.将其更改为:

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();
}
Run Code Online (Sandbox Code Playgroud)

Demo

PS.添加var为不会意外创建全局变量并简化您的逻辑.