本地环境下XMLHttpRequest的readyState与status状态异常问题求助
分析你的XMLHttpRequest异常问题
我帮你排查了代码里的几个关键问题,这些就是导致localhost环境下readyState和status异常的核心原因:
- 变量名大小写不匹配:你在回调里写的是
xmlHttp.responseText,但前面定义的XMLHttpRequest对象是xmlhttp(全小写h),JavaScript是大小写敏感的,这会直接导致无法获取响应文本,甚至报错干扰状态判断逻辑。 - innerHTML拼写错误:
document.getElementById('results').innerHtml里的innerHtml应该是innerHTML(最后一个H大写),这个错误会导致你无法把响应内容插入到页面目标元素中。 - 缺少请求核心步骤:你只创建了XMLHttpRequest对象,但没有调用
open()和send()方法发起请求!没有这两步,请求根本不会被发送,readyState自然无法推进到4,status也不会返回正确的200状态。 - 不必要的状态打印逻辑:你的回调函数里,只要readyState不是4或者status不是200就打印
not ...,但XMLHttpRequest的readyState是从0到4逐步变化的(0:未初始化,1:已打开,2:已发送,3:正在接收,4:完成),每次状态变化都会触发这个函数,所以在readyState到达4之前,你会不断看到这个打印,这会让你误以为状态异常,但其实这是正常的状态过渡过程。
修复后的代码示例
<script> function findMatch() { let xmlhttp; // 兼容创建XMLHttpRequest对象 if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject('Microsoft.XMLHttp'); } xmlhttp.onreadystatechange = function() { // 只在请求完成时处理结果 if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { // 修正innerHTML拼写与变量名大小写问题 document.getElementById('results').innerHTML = xmlhttp.responseText; } else { console.log('请求失败,状态码:', xmlhttp.status); } } }; // 新增:发起请求,替换为你实际要请求的本地URL(比如后端接口或静态文件路径) xmlhttp.open('GET', 'your-local-request-url', true); xmlhttp.send(); } </script>
额外提示
在localhost环境下,只要你的本地服务(比如Apache、Nginx或Node.js服务)正常运行,且请求URL正确,修复上述问题后,readyState应该能正常到达4,status返回200。如果仍有问题,可以打开浏览器开发者工具(F12),在Network标签里查看请求的详细情况,排查是否存在404、端口不匹配或其他服务端问题。
内容的提问来源于stack exchange,提问作者pedroyanky




