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 请求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();
}

Demo

附言。添加var到不要意外创建全局变量并稍微简化您的逻辑。

于 2013-06-04T13:17:38.300 回答
1

因为您正在调用该函数。

ajaxRequest.onreadystatechange = readyStateSwitch(ajaxRequest.readyState);

您没有分配功能。

ajaxRequest.onreadystatechange = function() { readyStateSwitch(ajaxRequest.readyState); };
于 2013-06-04T13:17:44.133 回答