ajax提交中新标签页打开响应返回的url
-
错误处理方式:
##触发按钮 <a href="javascrip:void();" data-url="xxxx" id='jiedong' class='tixian'>解冻</a> ##绑定事件 $("#jiedong").click(function (e) { $this = $(this); $this.text("处理中..."); $.ajax({ url: "xxxxxx", type: 'get', data: {}, success: function(data){ $this.text("解冻"); if(data.status == 1) { #新标签打开页面 window.open($this.attr("data-url"); } else { ..... } }, error: function () { alert("服务器异常"); } }); });
-
原因分析及处理方案:
- 原因:
使用window.open打开url,浏览器会将该请求当成非用户操作。
当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。因为浏览器认为这不是一个用户希望看到的页面。 - 处理方案:
原a标签正常执行新开页面操作,只是生效时间放到执行click操作之后,即:a标签绑定data-remote=”true“属性,延迟执行超链接动作,当click返回true时才执行href的链接。
注意:此时ajax提交要进行同步处理,不然超链接是不会等待ajax的请求处理完才执行了跳转操作。(默认是异步处理,所以需要设置async:true;)
- 原因:
-
修正后处理方式:
##触发按钮 <a href="xxxx" id='jiedong' class='tixian' data-remote="true" target="_blank">解冻</a> ## 绑定事件 $("#jiedong").click(function (e) { $this = $(this); ## 设置标杆,便于ajax的处理结果向外渗透 var flag = false; $this.text("处理中..."); $.ajax({ url: "xxxxxx", type: 'get', async: false, ## 重要 data: {}, success: function(data){ $this.text("解冻"); if(data.status == 1) { flag = true; ##向外渗透结果 } else { ..... } }, error: function () { alert("服务器异常"); } }); ## 决定是否执行超链接动作 return flag; });