You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将onreadystatechange回调设为带参const箭头函数遇readyState=1问题

问题解决:readystate持续停在1的原因

你的代码核心问题是漏调用了httpRequest.send()方法:XMLHttpRequest的open()仅用于初始化请求参数,必须调用send()才会真正发起网络请求。如果不执行这一步,请求会一直停留在readyState=1(OPENED)状态,永远不会触发后续的状态变更。

另外你担心的箭头函数问题不存在——这里的箭头函数是正确赋值给onreadystatechange的函数引用,并没有被立即调用,和当前问题无关。

修改后的完整代码:

const submit = document.getElementById("submit");

const makeRequest = () => {
    console.log('in makeRequest')
    const httpRequest = new XMLHttpRequest();
    if (!httpRequest) {
        alert('problem');
        return false;
    }
    httpRequest.onreadystatechange = () => renderProfile(httpRequest);
    httpRequest.open('GET', 'https://api.github.com/users/kamranahmedse');
    // 新增该行,发起实际请求
    httpRequest.send();
}

const renderProfile = (httpRequest) => {
    console.log('in renderProfile')
    if (httpRequest.readyState === XMLHttpRequest.DONE) {
        if (httpRequest.status === 200) {
            alert('working?');
        } else {
            alert('problem')
        }
    } else {
        console.log(httpRequest)
    }
}

submit.addEventListener('click', makeRequest)

调用send()后,请求会正常发起,readyState会依次推进到2、3,最终到达4(DONE),此时你的回调就能正确处理响应结果了。

内容的提问来源于stack exchange,提问作者C.G.F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:51:25