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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:12:43