首页 文章

使用Javascript重定向会附加链接而不是重定向

提问于
浏览
1

我正在编写的脚本用于创建ajax请求的HTML页面,响应是外部链接 . 然后浏览器应该重定向到这个外部URL(例如从localhost:3000到www.stackoverflow.com) . 但是,会附加URL(localhost:3000 /“www.stackoverflow.com”) . 如何在纯JavaScript中重定向到新页面?

我已经尝试过以下方法:window.location.href =,location.href =,window.location.replace(),window.location.assign() . 所有这些都导致了附加URL .

var http = new XMLHttpRequest();

http.onreadystatechange = function(){
    if(http.readyState == 4 && http.status == 200){
        window.location.href = http.response
    }
}
http.open("GET", "/1", true);
http.send();

2 回答

  • 0

    只需将其更改为

    var http = new XMLHttpRequest();
    
    http.onreadystatechange = function(){
        if(http.readyState == 4 && http.status == 200){
            window.location.href = 'http://' + http.response.replaceAll("^\"|\"$", "");
        }
    }
    http.open("GET", "/1", true);
    

    但如果服务器发送的任何网址已经包含“http://”,则必须在分配网址http.send()之前对此进行处理;

    .replaceAll("^\"|\"$", "") 用于删除服务器似乎也发送的双引号 .

  • 0

    假设您的 response 变量如下所示:

    'www.stackoverflow.com'
    

    在分配给 location.href 之前,您应该为它添加 http:// (或 https:// ),以确保浏览器将其解释为绝对(而不是相对)URL .

    var http = new XMLHttpRequest();
    
    http.onreadystatechange = function() {
      if (http.readyState == 4 && http.status == 200) {
        window.location.href = 'http://' + http.response
      }
    }
    http.open("GET", "/1", true);
    http.send();
    

    如果您不确定 response 是否包含URL方案,则可以使用正则表达式检查使代码更灵活:

    var http = new XMLHttpRequest();
    
    http.onreadystatechange = function() {
      if (http.readyState == 4 && http.status == 200) {
        var url = http.response
        window.location.href = (/^https?:\/\//.test(url) ? '' : 'http://') + url
      }
    }
    http.open("GET", "/1", true);
    http.send();
    

相关问题