`
chenzhou123520
  • 浏览: 4260657 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在Ajax请求中以_blank方式请求新的页面会被拦截

阅读更多

呃。。标题实在是不知道怎么描述比较合适,先说发现此问题的背景吧:

 

在项目中有这样的一个应用场景,用户点击页面的一个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 - 向服务器发送请求

分享到:
评论
2 楼 HPF_SOFT 2015-04-07  
有没有好的办法,谢谢
1 楼 HPF_SOFT 2015-04-07  
不起作用,我这边实验的是ajax的响应时间过长,就会被拦截(我加上同步的了)

相关推荐

    弹出窗体被拦截解决方案

    2. 表单提交结合`_blank`属性:在Ajax请求成功后,通过操作一个带有`_blank`属性的表单进行提交,试图绕过拦截。然而,由于跨域限制和浏览器安全策略,这种方法同样可能被拦截。 3. 通过中间页面转发:尝试在同域名...

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

    废话不多说,关键代码如下所示: jQuery.ajax({ ...会被浏览器拦截,无法打开新窗口,如果把window.open()放在ajax外面,问题就迎刃而解,代码如下: var result=""; jQuery.ajax({ "type":"post",

    window.open打开窗口被拦截的快速解决方法

    这样,新窗口会在Ajax请求完成后才开始加载页面,避免了被浏览器拦截。 在使用`window.open`时,还需要注意以下几点: - 提供窗口特征参数:如宽度、高度、是否显示工具栏等,以增加打开窗口的合理性。例如`...

    js使用post 方式打开新窗口

    在这个函数中,我们动态创建了一个`&lt;form&gt;`元素,并设置了它的`action`属性为目标URL,`target`属性为`"_blank"`以在新窗口打开,`method`属性为`"post"`表示POST请求。然后,我们遍历传入的参数对象,为每个键值对...

    详解window.open被浏览器拦截的解决方案

    在网页开发中,有时会遇到使用`window.open`方法创建新窗口被浏览器拦截的问题,这主要是因为浏览器的安全策略。浏览器为了防止恶意脚本无休止地弹出窗口,会对非用户交互触发的`window.open`调用进行拦截。本文将...

    struts2-blank-2.0.14的lib中的jar包

    在"struts2-blank-2.0.14"版本中,`lib`目录下的jar包是整个框架运行的基础,它们包含了Struts2核心组件、依赖的库和其他必要的工具。下面我们将详细探讨这些jar包及其在Struts2框架中的作用。 1. **Struts2核心...

    window.open()实现post传递参数

    常常遇到这样的需求,即实现子系统页面之间跳转并在新的页面打开,我所在项目组使用的是SSH框架,所以url均为类似****.action,同时还带有两参数(系统ID与系统名称),两个参数被struts拦截后存入session中,...

    struts 空项目 struts2-blank-2.0.12.war

    Struts2是Apache软件基金会的开源项目,它是在Struts1的基础上发展起来的,提供了一种模型-视图-控制器(MVC)架构模式,旨在简化Java Web应用的开发。Struts2框架整合了许多其他优秀框架的功能,如Freemarker和...

    struts2课堂笔记

    - Struts2是由Apache软件基金会维护的一个开源项目,它是Struts1的下一代版本,解决了许多Struts1中存在的问题,并引入了许多新特性。 - Struts2最初是在2005年由WebWork和Struts1的基础上合并发展而来,随着技术的...

    struts2 PPT教程

    Struts2的主要目标是提供一个更加灵活和强大的解决方案,以解决Struts1.x版本中存在的问题,如表现层技术单一、与Servlet API耦合严重、不易测试等。 在Struts1.x中,表现层技术主要局限于JSP,与Servlet API耦合...

    struts2.2.1apps

    开发者通常会关注每个新版本的发布,以了解其改进和增强的地方。 3. **示例应用** - **struts2-portlet.war**:这个示例展示了如何在portlet环境中使用Struts2。Portlets是一种Web组件,可以在portlet容器如...

    struts-2.2.3.1-apps

    1. **Action和Result**:在Struts 2中,Action是业务逻辑的载体,负责处理用户的请求。当一个Action被调用后,它会执行相应的业务逻辑,并返回一个Result。Result定义了如何展示Action的输出,如转发到另一个页面...

    北大青鸟struts2教程

    拦截器在Action被调用前后执行,形成一个拦截器链。当HTTP请求到达Servlet容器时,经过一系列标准过滤器,如ActionContextCleanUp,然后FilterDispatcher被调用。FilterDispatcher通过ActionMapper确定与请求相关的...

    最新Struts2入门(Struts2入门), PPT教程

    Struts2是一个强大的Java EE应用程序框架,主要用于构建MVC(模型-视图-控制器)架构...在实际开发中,还会涉及到更多的高级特性,如拦截器、动态方法调用、OGNL表达式语言等,这些都是进一步深入学习Struts2所必需的。

    网页链接

    )以及用于AJAX请求的hashbang(#!)。此外,现代网页应用中,JavaScript常用于处理动态链接,例如单页应用(SPA)中的路由管理,利用`window.location`对象改变当前URL,或者通过`fetch`或`XMLHttpRequest`发送异步...

    Struts2框架基础 一

    - Struts2的核心库以及其他依赖库需要被包含在项目的classpath中。这些库通常包括但不限于struts2-core.jar、xwork-core.jar等。 2. **解压并配置Struts2示例代码**: - 可以从Struts2的官方文档或者下载站点获取...

Global site tag (gtag.js) - Google Analytics