2017-03-03 118 views
1

我正在编写的脚本是用于制作ajax请求的HTML页面,响应是外部链接。然后浏览器应该重定向到这个外部URL(例如从localhost:3000到www.stackoverflow.com)。但是,该URL被添加(localhost:3000 /“www.stackoverflow.com”)。我如何重定向到纯JavaScript的新页面?使用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(); 
+3

做的http.response变量' http://'在开始? –

+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); 

但如果任何URL服务器发送已经拥有的“http://”在里面,你以前分配的URL http.send对待这个();

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

0

假设你response变量看起来像这样:

'www.stackoverflow.com' 

分配给location.href,以确保浏览器将其解释为绝对(而非相对)URL之前,您应该预先考虑http://(或https://)将其。

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();