Ajax请求的响应与window.open响应打开一个新窗口被截获

Ajax请求的响应与window.open响应打开一个新窗口被截获
1。对问题的描述
在Ajax异步请求是成功的,我们需要在新窗口打开网址,使用window.open()方法,但是它会被浏览器所堵塞,我们需要用户点击。
两。问题分析
新的浏览器拦截窗口是因为操作不是用户主动触发,所以认为拦截是不安全的,即使点击仿真实施或提交用户行为Ajax回调函数(触发(听到咔哒声)),浏览器不被认为是由用户主动触发,它可以所以它是安全的执行拦截。
解释uff1a
1、如果你调用window.open()在指定的有趣的方法,它将不会被拦截,因为浏览器会认为这是积极的。但在Ajax请求的响应打开窗户会被截获。
2,如果不是新窗口打开,但是改变原来的网页地址,你可以使用window.location = newurl做它,所以它不会被拦截。
三。解决
在Ajax请求,用window.open打开一个空白窗口,然后设置窗口的位置属性在Ajax响应函数作为新的URL。
代码示例,例如:

功能乐趣(){
无功tmpwin = window.open()
ajax(xxx、句柄(){(){
回调函数。这是一个伪代码,并且不允许语法。
无功newurl = XXXX
tmpwin.location = newurl;
})
}
当上述方法出现问题时,因为首先打开空白窗口,如果Ajax请求失败(网络或业务逻辑问题),则新窗口中不会出现正常结果,这可能会引起用户的怀疑。

解决的办法是,当Ajax有问题,你可以考虑给个提示,如tmpwin.document.write(服务处理异常);
甚至为了防止Ajax响应时间太长,当窗口,提示提示tmpwin.document.write(服务器正在处理中,请稍后);
如果Ajax正常返回,则设置位置值,原始打印信息由新页信息覆盖。
还有另外一种方法,但也有缺陷。
因为AJAX可以设置为一个同步的要求,新的窗口可以打开window.open Ajax请求后,如:

功能乐趣(){
VaR结果;
ajax(设置)/同步请求
的…
结果:XXX

})
如果(结果){
Window.open(XXXX)
}
}
根据Ajax请求的结果判断上述方法,打开一个新窗口并避免上述问题。

但是由于同步请求,我们在测试中发现了一个问题。如果服务器响应时间太长,接口将暂停(用户体验不好),而两个新窗口将被截获。
只有当服务器快速返回时才有问题。当我们测试时,我们在服务器代码处理中休眠1秒,并发现新窗口被截取。
四、总结
总之,您可以看到Ajax返回后没有一个特别完美的方法来打开一个新窗口,特别是我们应该根据您自己的系统的业务特性采取相应的实践。
以上是介绍了Ajax请求的响应由window.open的解决方案,这是由新的Windows封锁。我希望它会对你有帮助。如果你有任何问题,请给我留言,萧边会及时给您回复。谢谢您支持网站
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部