window.open()我想应该不少人都不陌生吧,它能够实现除用a标签之外来实现打开新窗口!ajax
最近开发项目用到时,却遇到了麻烦,原本好好的弹出窗口,结果被浏览器无情的给拦截了!json
代码以下:浏览器
$.getJSON(URL,data,function(data,state){ if(state=='success'){ window.open('http://www.cnblogs.com/garfieldzhong/'); }else{ alert('请求失败!'); } })
这要手动容许弹出窗口,开发的东西但是给要给用户玩的,这样的拦截显然是玩不转的!安全
这让我百思不得其解,因而乎,只有到百度里谷歌之,发现,原来,这竟然是浏览器出于对安全的考虑,把这种非用户操做的行为给拦截了!这若是不解决掉显然是有损助用户体验的!异步
方法倒也挺多的,不过,有些方法试了貌似是行不通的!好比建立一个a标签,getJson完了去触发a的点击,事实证实这方法对此无效;还有加定时器的,这貌似也不行,并且,加定时器这事我的以为也挺不靠谱的,毕竟,你没法预知网友的网速等等,不肯定性太在!async
这里介绍下我的亲自试过,并且有效的方法!ide
方法一:url
$("#btn").on("click",function(){ var goto = window.open(); $.getJSON(URL,data,function(data,state){ if(state=='success'){ goto.location.href = 'http://www.cnblogs.com/garfieldzhong/' }else{ alert('请求失败!'); } }) });
此方法,能够实现新窗口打开新页面,不过,它有个问题,那就是当异步请求失败了,也依然会有一个新窗口打开,由于它的原理很明显,是一开始打开一个空的新窗口,而后改变新窗口的url,以此来实现跳转。这彷佛与咱们的要求不太符合。因此找来了第二种方法!spa
方法二:code
$("#btn").on("click",function(){ $.ajaxSettings.async = false; //请求前设置为同步请求 $.getJSON(URL,data,function(data,state){ $.ajaxSettings.async = true;//切记,请求完成以后要设置回异步 if(state=='success'){ goto.location.href = 'http://www.cnblogs.com/garfieldzhong/' }else{ alert('请求失败!'); } }) });
关键词就是$.ajaxSettings.async,设置了ajax请求的方法,请求前为同步请求,这样就能避免被浏览器拦截,可是,不推荐使用同步方法,因此,当这次ajax/getjson完了以后要把值改回 true。
目前,由于本人水平不限,只能用这样的方法来实现,不知道哪位大神有没有更好的方法,但愿能给予指导啊!