2017-03-03 10 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

サンプルのベースURLとターゲットURLを追加する –

答えて

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://」があることで、あなたは http.send URLを割り当てる前に、これを処理するために持っています();

.replaceAll("^\"|\"$", "")は、サーバーが送信しているように見える二重引用符を削除するためのものです。

'www.stackoverflow.com' 

あなたはブラウザが(相対的ではなく)絶対URLとして解釈することを確実にするためにlocation.hrefに割り当てる前に、それにhttp://(またはhttps://)を先頭に追加する必要がありますあなたのresponse変数は次のようになりますと仮定すると、

0

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(); 
関連する問題