【问题标题】:Redirecting with Javascript appends link instead of redirecting使用 Javascript 重定向附加链接而不是重定向
【发布时间】:2017-03-03 19:04:42
【问题描述】:

我正在编写的脚本是用于一个 HTML 页面,该页面旨在发出 ajax 请求,响应是一个外部链接。然后浏览器应该重定向到这个外部 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();

【问题讨论】:

  • http.response 变量的开头是否有http://
  • 添加样本库和目标网址

标签: javascript redirect


【解决方案1】:

改成

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("^\"|\"$", "") 用于删除服务器似乎也在发送的双引号。

【讨论】:

    【解决方案2】:

    假设您的 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();
    

    【讨论】:

      猜你喜欢
      • 2017-07-23
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多