156-0102-3311
联系QQ 284710375
首页 > 技术分享 > AJAX
分享到:收藏

ajax跨域请求成功后打开新页面window.open()被拦截的解决办法2017-06-21 22:00:46

杨宇潇 原创文章,转载请标明出处
ajax请求成功后,我们想在success中打开一个新的页面,如果是在当前页面跳转,可以直接用window.location.href="链接",但是如果想打开新页面,需要用window.open()方法

简单介绍window.open()的使用方法,window.open("链接","打开方式"),如:window.open("http://boke.daxiaokj.cc","_blank");

但是在ajax异步加载成功时用window.open()打开新链接,会默认被浏览器拦截,因为毕竟是ajax异步加载到的信息,浏览器会认为它是不安全的,所以不让跳转,这时有一个很简单的解决办法,把异步加载改成同步即可,即:anysc:false,但是如果ajax的加载的信息来自于另外一个网站,需要用到jsonp跨域传数据,这时的ajax强制使用异步加载(ajax跨域只能异步加载,同步无效),这样来讲window.open肯定要被拦截,所以这里有一个解决方法:将新开窗口指向为一个对象,然后修改对象的 url

举个例子:
$('.task').click(function(){
    var open= window.open();
    $.ajax({
        type: 'POST',
        url: '/surveyTask',
        dataType: 'json',
        success: function(res){
             open.location = res.url;
        },
        error: function(){
             open.close();
        },
    });
});
小技巧而已,如有不同见解,欢迎下方留言。

打赏

阅读排行

    大家都在搜

    博客维护不易,感谢你的肯定
    扫码打赏,建议金额1-10元
  • 15601023311