呃。。标题实在是不知道怎么描述比较合适,先说发现此问题的背景吧:
在项目中有这样的一个应用场景,用户点击页面的一个button,然后对用户的信息进行异步校验,校验通过之后触发一个请求,请求的目标页面需要打开新的页面,也就是请求的action的target属性为“_blank”,但是在测试时发现新开页面会被浏览器拦截,模拟场景代码如下:
<html>
<head>
<title>Test for ajax</title>
<script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<h1>Index Page</h1>
<a href="#" id="button">提交</a>
<script type="text/javascript">
$("#button").click( function() {
$.ajax({
url : "#", //url为校验用户信息的方法
async : true,
success : function() {
window.open("http://www.baidu.com");//window.open效果等于target='_blank'
return false;
}
});
return false;
})
</script>
</body>
</html>
说明:代码如上所示,当点击“提交” button时,调用ajax方法,当ajax返回成功响应后打开http://www.baidu.com,但是结果却是页面被浏览器拦截,如下图所示:
解决方案:把ajax方法的async属性值设置为false,如下:
$.ajax({
url : "#", //url为校验用户信息的方法
async : false, //同步属性设为false
success : function() {
window.open("http://www.baidu.com");//window.open效果等于target='_blank'
return false;
}
});
这样,再次测试后就能正常打开新的页面了。
注:为什么会被浏览器拦截还没找到原因,估计是处于安全考虑。
不过根据w3cschool所述,一般是不推荐使用 async=false,JavaScript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。具体参见:AJAX - 向服务器发送请求
分享到:
相关推荐
Android Webview虽然提供了页面加载及资源请求的钩子,但是对于h5的ajax请求并没有提供干涉的接口,这意味着我们不能在webview中干涉javascript发起的http请求,而有时候我们确实需要能够截获ajax请求并实现一些功能...
Js 拦截全局ajax请求
struts2在struts2.xml里配置拦截器可以过滤到指定的url的请求,但是对于ajax的请求确是过滤不了,比如说sesion超时或某些页面有权限控制的,通过ajax的请求时系统会报错最近在解决此类问题时碰上了找了不少资料,...
以下图为例,页面中通过一个Load链接以Ajax请求的方式加载数据(左)。当用户点击该链接之后,Ajax请求开始,GIF图片显示“Loading“状态,同时当前页面被“罩住”防止用户继续点击Load按钮(中);Ajax请求完成被...
chrome扩展插件获取ajax请求记录
如何在Thymeleaf中实现ajax请求url的可靠构造
ajax重写方法搭配后台filter返回status实现ajax请求跳转登录页面
2023最新ajax请求第三方接口天气预报案例.docx2023最新ajax请求第三方接口天气预报案例.docx2023最新ajax请求第三方接口天气预报案例.docx2023最新ajax请求第三方接口天气预报案例.docx2023最新ajax请求第三方接口...
jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步。这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出现
HTML使用极简的方式通过ajax请求实现前后端交互。文中不使用form表,为了方便ajax拼接其他参数。
主要介绍了解决拦截器对ajax请求的拦截实例详解的相关资料,需要的朋友可以参考下
打包好的Ajax代码,实现了对象化,使用时直接调用就可以了,调用时需要重构三个方法,如下: function onerror() //错误处理方法 { alert("error"); } function getInfo() //发送请求方法,包括请求方法和请求...
springmvc接收ajax请求注意事项
NULL 博文链接:https://xnbhnly.iteye.com/blog/1337392
今天小编就为大家分享一篇jQuery中ajax请求后台返回json数据并渲染HTML的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
使用Ajax get请求数据的小例子,使用$.each()循环显示到表格,里面有接口,大家可以使用,欢迎指导学习
简单页面访问后台接口的一个样例,用于调试后台接口是否支持跨域,是否支持ajax请求,是否又正确的值返回前端,在postman正确的情况下浏览器不一定能成功,此时就需要用ajax模拟调用检查
浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了,即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger(‘click’)),浏览器也会认为不是由用户主动...
POST方式发送ajax请求详解,并对表单数据进行封装!