ajax请求成功后新开窗口window.open()被拦截解决方法

问题:

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

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

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

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

$('.task').bind('click',function(){ var w = window.open(); $.ajax({ type: 'POST', url: '/surveyTask', dataType: 'json', error: function(){ w.close(); }, success: function(res){ w.location = res.url; } }); });

最后需要说明的是:网上的动态添加 form 新开窗口的方法,并不适合 ajax 请求,至少博主测试了下仍然被浏览器所拦截。

时间: 2024-08-20 00:24:01

ajax请求成功后新开窗口window.open()被拦截解决方法的相关文章

ajax请求成功后新开窗口window.open()被拦截解决方法_AJAX相关

问题: 前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是很可惜被浏览器给拦截了,怎么解决这个问题呢? 分析: 浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所

ajax请求成功后的返回数据

问题描述 ajax请求成功后的返回数据 我用ajax发送请求做注册,若请求成功且注册成功,用了alert("注册成功"), 若验证码或其他问题,导致访问成功但是未注册成功,会有其他的信息弹出. 在不同情况下,其他信息都会根据各种情况正确的弹出,但是当注册成功时(查了后台数据,能够查到新注册的信息),"注册成功"字样不弹出来. 解决方案 你在success回调里面return内容无用,没有任何对象接收返回值,而且ajax是异步的,如果你userLive要返回数据,也需

Ajax请求成功后打开新窗口地址_AJAX相关

废话不多说,关键代码如下所示: jQuery.ajax({ "type":"post", "url":"http://www.baidu.com", "success":function(rel){ if(rel.isSuccess){ window.open(rel.url,"_blank"); } } }); 这个url请求成功后window.open(rel.url,"_

Ajax请求成功后打开新窗口地址

废话不多说,关键代码如下所示: jQuery.ajax({ "type":"post", "url":"http://www.baidu.com", "success":function(rel){ if(rel.isSuccess){ window.open(rel.url,"_blank"); } } }); 这个url请求成功后window.open(rel.url,"_

spring mvc ajax请求数据后,前台根据返回的key如果跳转的别的jsp界面

问题描述 spring mvc ajax请求数据后,前台根据返回的key如果跳转的别的jsp界面 根据返回的data,在jsp前端进行跳转,有没有好的办法,还是可以通过配置就可以实现: window.location不太好使,可以跳转但是URL地址会显示具体的参数: 解决方案 参数你都放action里面了...那肯定显示了..fm表单放一个隐藏域存储你的cardList参数 <form id="fm" action="${}.../cardlist">&

ajax传入成功后执行后台方法

问题描述 ajax传入成功后执行后台方法 做一个网站,再页面读取一段文字后,点击按钮,用ajax将文字传回后台,现在我希望ajax返回成功后,执行另外一段后台方法, 请问有什么好方法吗? [WebMethod] public static string GetStr(string s) { linkWord = s; return linkWord; } private void BtCompare() { //在页面选中一段句子,在某个地方弹出一个按钮,点击按钮,将选中的句子传入到下面的s当中

Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因_javascript技巧

看到别人写的JS,ajax请求地址后加随机参数,比如XXXX?t= + new Date().getTime(). 一开始搞不懂为什么,网上查了资料,原因是防止浏览器缓存. 浏览器为了提高用户访问同一页面的速度,会对页面数据进行缓存.当url请求地址不变时, 有时候会导致浏览器不发送请求,直接从缓存中读取之前的数据. 如果数据改变了,而没加随机数,读取的数据会跟之前一样. 加上随机数,就是欺骗浏览器url改变了,会每次都向服务器发送请求而不去读缓存

mfc-关于HttpSendRequestA函数发送请求成功后,保存网页返回内容的问题

问题描述 关于HttpSendRequestA函数发送请求成功后,保存网页返回内容的问题 下边的代码是点击按钮事件的,HttpSendRequest明显已经执行成功,得到的recv.html中依然是登陆页面,不是我想要的登陆后跳过去的页面 #include <afxinet.h> #include <WinInet.h> #include <cstring> #pragma comment(lib,"wininet.lib") void CLOGIN

请求赋值-ajax请求数据后赋值后为什么会把值清空了

问题描述 ajax请求数据后赋值后为什么会把值清空了 function formSubmit(url) { var urlPrefix = "http://localhost:8080/gtms/"; var param = '${param.name}'; var url = urlPrefix + param + ".action"; $.ajax({ url : "../apiTest/test.action?url=" + url, da