XMLHttpRequest.responseURL获取302重定向后的地址

28,936次阅读
没有评论

共计 1172 个字符,预计需要花费 3 分钟才能阅读完成。

前言

需求是请求一个接口,这个接口是一个 302 重定向地址,拿到重定向地址后,解析里面的参数,然后做一些逻辑操作,那么前端如何获取 302 重定向后的地址呢?

传统 ajax 方式

之前有写文章 封装一个原生 js 的 ajax 请求, 支持 IE9CORS 跨域请求,采用这种 ajax 请求的方式请求 302 地址,或者采用 axiso,jquery 等 ajax 请求 302 地址,都会返回空,并且直接跳转 302 之后的页面。这个不是我们想要达到的,那么有什么办法可以拿到 302 重定向的地址,而不跳转呢?

XMLHttpRequest.responseURL

只读属性 XMLHttpRequest.responseURL 返回响应的序列化 URL,如果 URL 为空则返回空字符串。如果 URL 有锚点,则位于 URL # 后面的内容会被删除。如果 URL 有重定向,responseURL 的值会是经过多次重定向后的最终 URL。

方法代码

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.haorooms.com/post/js_ajax_cors_kyqq', true);
xhr.onload = function () {console.log(xhr.responseURL); // https://www.haorooms.com/post/js_ajax_cors_kyqq
};
xhr.send(null);

通过 responseURL 就可以拿到 302 后的地址

简单方法封装

function get302UrlResponse(url, callback) {var xhr = new XMLHttpRequest()
  xhr.open('GET', url, true)
  xhr.onload = function () {callback(xhr.responseURL)
  }
  xhr.send(null)
}

使用

   get302UrlResponse(jumpUrl, (callBackurl) => {if (callBackurl) {let urlqueryObj = GetPageQueryString(new URL(callBackurl).search)
          let clickId = urlqueryObj['qz_gdt']
          callback({clickid: clickId, dstlink: callBackurl, interactionType})
        } else {callback({ clickid: null, dstlink: jumpUrl, interactionType})
        }
      })

小结

上面就是 ajax 获取 302 后地址的方式。小知识点,记录一下。

haorooms前端博客,欢迎访问 haorooms,最近 haorooms 关键词排名下降比较厉害,每个页面我都加一下关键词,欢迎访问 haorooms 前端博客。

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计1172字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)