将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
相关产品推荐
相关产品推荐

