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

时间:2017-03-03 19:04:43

标签: javascript redirect

我正在编写的脚本用于创建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 :(得分: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("^\"|\"$", "")用于删除服务器似乎也发送的双引号。

答案 1 :(得分:0)

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

'www.stackoverflow.com'

在分配给http://之前,您应该先将https://(或location.href)添加到其中,以确保浏览器将其解释为绝对(而不是相对)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();