2017-03-03 115 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();