需求
这阵子接到个任务:如果用户没有连接vpn,那么他无法正常访问需要连接vpn的网站。需求是在访问该网站之前判断用户是否连接了vpn,如果没有,就给一个友好的提示。
思考
如何判断用户是否连接了vpn?我最初的想法是:先获取用户的ip,然后判断ip和该网站的ip是否在同一个网络下,但是由于鄙人对计算机网络的认知仅停留在会背七层协议的阶段上,加之万能的百度谷歌都没有搜到满意的解决思路。所以必须另辟蹊径。
思路
我们是否能够请求该网站,然后判断请求的状态码,以判断用户是否连接vpn?于是,在访问该网站之前,我异步请求了该网站,然后设置超时,最后在请求完成事件中做逻辑判断,成功的解决了该任务,走向了人生的巅峰。
参考代码
var url = 'http://www.baidu.com'
$.ajax({
url: url,
timeout: 3000,
dataType: 'jsonp',
async: true,
complete: function (xhr) {
if (xhr.readyState === 4 && xhr.status === 200) {
window.open(url)
} else {
alert('网络请求失败,请检查您的网络或使用vpn连接!')
}
}
})
心得
- ajax的complete回调还有一个参数status,可以获取请求的最终状态。我做项目的时候发现个问题,一个网址在我本机打开状态是timeout,在另一台机器打开状态时error,然后我的代码逻辑是判断状态是否是timeout,没有考虑到error的情况,所以最好通过状态码去判断是否请求成功。
- 一个问题有多种解法,当你一个方向走不通时,可以考虑从另外的角度看问题。
- 写这篇文章的目的是:每个月都要写至少一篇csdn博客,算是为了完成目标吧!?
版权声明:本文为cblstc原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。