在Ajax请求中以_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 - 向服务器发送请求


方法二:

<input type="button" class="preview" value="预览"/>
$('.preview').live('click', function(){
  var w = window.open();//发请求之前打开一个空页面
  $.ajax({..., success:function(msg){
    setTimeout(function(){w.location='http://www.baidu.com';}, 0);//0秒后给新窗口的localtion赋值
  }});
});



使用selenium拦截异步请求可以通过以下步骤实现: 1. 首先,导入selenium库和相关模块: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC ``` 2. 创建一个WebDriver实例,比如使用Chrome浏览器: ```python driver = webdriver.Chrome() ``` 3. 打开目标网页: ```python driver.get('http://www.example.com') ``` 4. 使用WebDriverWait等待异步请求完成: ```python wait = WebDriverWait(driver, 10) # 设置等待时间为10秒 element = wait.until(EC.presence_of_element_located((By.ID, 'element_id'))) ``` 5. 拦截异步请求: ```python requests = driver.requests # 获取所有的请求 for request in requests: if request.response: print(request.url, request.response.status_code) ``` 在上述代码中,我们使用WebDriverWait来等待页面加载完成,然后使用driver.requests获取所有的请求,遍历请求列表并判断是否有响应,如果有响应则打印请求的URL和响应的状态码。 请注意,以上代码仅为示例,具体的拦截异步请求的实现可能因网页结构和异步请求方式而有所不同。具体的实现方法可能需要根据实际情况进行调整。\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Python爬虫第二课 Selenium介绍和反爬技术](https://blog.csdn.net/fegus/article/details/124447201)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MVC – 14.ajax异步请求](https://blog.csdn.net/weixin_30974667/article/details/119524939)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值