XMLHttpRequest跳转逻辑异常:状态判断错误及页面访问问题排查
问题排查与修复:你的XMLHttpRequest跳转脚本异常解析
嘿,我来帮你拆解下这个脚本的问题,主要有三个核心点导致它没按预期执行:
1. 异步请求的时机错误
你用的是异步XMLHttpRequest(open方法第三个参数是true),这意味着req.send()之后,浏览器会继续执行后面的代码,不会等待请求完成。这时候立刻读取req.status,得到的只是初始状态0,根本不是请求完成后的真实状态码,逻辑自然完全走偏了。
2. 条件判断的语法错误
你的判断条件if (req.status != "200" || "404")完全不符合逻辑:
- 首先,
req.status是数字类型,用字符串"200"比较会有类型不匹配的问题; - 其次,
|| "404"这个写法等价于直接判断"404",而非空字符串是真值,所以这个条件永远为true,不管请求状态是什么,都会执行跳转到那个无法访问的URL分支。
正确的写法应该是判断状态码不是200 或者 是404:if (req.status !== 200 || req.status === 404)(注意用全等判断类型)。
3. 目标跳转URL本身的有效性问题
你提到http://test1.info/portal/#portal在Chrome无法访问、IE无法显示,且返回404,这本身就是无效地址——就算脚本逻辑修复了,跳转到这个地址也达不到预期效果,得先确认这个URL的正确性。
修复后的完整代码
我们需要利用XMLHttpRequest的onload回调,等待请求完成后再判断状态:
function website() { var req = new XMLHttpRequest(); // 监听请求完成事件 req.onload = function() { console.log("请求完成,状态码:", req.status); // 控制台打印状态,方便调试 // 正确的条件判断:状态不是200 或者 是404时跳转 if (req.status !== 200 || req.status === 404) { // 这里建议先替换成有效的测试URL,或者先确认原URL的有效性 window.location.href = "http://test1.info/portal/#portal"; } else { alert("请求成功,即将跳转至index3"); window.location.href = "http://test.example.info/index3.html"; } }; // 监听请求出错的情况(比如网络问题、跨域错误) req.onerror = function() { alert("请求发生错误,即将跳转"); window.location.href = "http://test1.info/portal/#portal"; }; req.open('GET', 'http://mytest.info/index2.html', true); req.send(); }
页面的body标签保持:
<body onload="website()">
另外补充一点:如果http://mytest.info和当前页面域名不同,还会遇到跨域问题,XMLHttpRequest会被浏览器阻止,这时候你需要确认是否有跨域权限,或者改用其他跨域方案(比如JSONP、CORS配置)。
内容的提问来源于stack exchange,提问作者striker92
相关产品推荐
相关产品推荐

