源码侠

【jquery】ajax 请求成功后新开窗口被拦截解决方法

󰌂发布时间 2024-10-09 热度 1003

 当前位置:  首页 / 教程资源 / 前端教程

教程内容:

问题:

前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是很可惜被浏览器给拦截了,怎么解决这个问题呢?


分析:

浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以被拦截。


解决方法:

1、异步改为同步,即:async:false

2、将新开窗口指向为一个对象,然后修改对象的 url,比如:

  1. $('.task').bind('click',function(){
  2.     var w = window.open();
  3.     $.ajax({
  4.         type: 'POST',
  5.         url: '/yourURL',
  6.         dataType: 'json',
  7.         error: function(){
  8.             w.close();
  9.         },
  10.         success: function(res){
  11.             w.location = res.url;
  12.         }
  13.     });
  14. });

如果是get或者post方法的话,只需要改为同步即可,在全局设置:

  1. $.ajaxSetup({  
  2.     async : false  
  3. });

这样就不会被浏览器主动拦截了,亲测可用。

评论(0)条

    源码侠

    站长素材 - 建站资源分享平台

    源码侠提供各类虚拟产品,虚拟资源以及教程、模板、素材等,源码侠是一个互联网虚拟产品,虚拟资源聚集地的特色网站!

    反馈建议

    kefu@xuniku.cn fuwu@xuniku.cn

    周一至周日9:00-23:00

    在线QQ咨询

    本期用户推荐小程序

    本站所有资源均为会员提供或网上搜集,版权归原作者所有,如需商业用途或转载请与原作者联系!所提供的内容仅供观摩学习交流之用,请勿用作商业用途!如有侵权,请及时 联系我们 删除

    Powered by 源码侠 © 2010-2020 流量联盟   copyright   北京流量圈信息科技有限公司