项目中的应用场景是点击用户姓名,如果用户存在打开新窗口展示用户详情页面,如果用户在详情页面被删除,再次点用户姓名弹框提示此用户已被删除;代码写好后测试时发现打开新页面请求被浏览器拦截。代码如下:
handle_show_customer_info: function(customer_id){
$.ajax({
url: "/customer_management/customers/" + customer_id + "/exist",
type: "POST",
success: function (data) {
if(data == 'exist'){
window.open("/customer_management/customers/" + customer_id + '/edit')
}
else{
$("#deleted_customer").modal('show')
}
},
error: function () {}
})
}
以上代码是点击用户姓名时调用ajax方法,当ajax成功回调返回exist后打开新页面,否则弹框提示,这种情况下页面是被拦截的。
解决方案:把ajax方法的async属性值设置为false,如下:
handle_show_customer_info: function(customer_id){
$.ajax({
url: "/customer_management/customers/" + customer_id + "/exist",
type: "POST",
async: false,
success: function (data) {
if(data == 'exist'){
window.open("/customer_management/customers/" + customer_id + '/edit')
}
else{
$("#deleted_customer").modal('show')
}
},
error: function () {}
})
}
这样请求新页面的时候是正常的
这个ajax请求则为同步请求,用户其它操作必须等待请求完成才可以执行。
如果async设置为:true,则不会等待ajax请求返回的结果,会直接执行ajax后面的语句。
注:为什么请求会被浏览器拦截原因还没找到
分享到:
相关推荐
当用户未直接点击链接或按钮时,例如在Ajax请求的回调函数中执行`window.open()`,浏览器会认定这不是用户主动的行为,从而拦截新窗口的打开。尝试在Ajax回调中模拟用户点击事件(如`$(element).trigger('click')`)...
在网页开发过程中,有时会遇到使用JavaScript的`window.open`函数打开新窗口被浏览器拦截的情况。这通常是由于浏览器的安全策略导致的,特别是像Chrome这样的现代浏览器,为了防止弹窗广告等不良用户体验,对`window...
在网页开发过程中,有时我们需要在Ajax请求成功后执行某些操作,比如打开一个新的窗口来展示返回的数据。然而,当使用`window.open()`方法时,如果这个操作不是由用户的直接交互(如点击按钮)触发,浏览器出于安全...
今天在处理页面ajax请求过程中,想实现请求后打开新页面,就想到通过 js window.open 来实现,但是最终都被浏览器拦截了。 二、分析: 在谷歌搜索有没有解决方法,有些说可以通过新建a标签,模拟点击来实现,但是...
在网页开发中,有时会遇到使用`window.open`方法创建新窗口被浏览器拦截的问题,这主要是因为浏览器的安全策略。浏览器为了防止恶意脚本无休止地弹出窗口,会对非用户交互触发的`window.open`调用进行拦截。本文将...
常常遇到这样的需求,即实现子系统页面之间跳转并在新的页面打开,我所在项目组使用的是SSH框架,所以url均为类似****.action,同时还带有两参数(系统ID与系统名称),两个参数被struts拦截后存入session中,...
1. 使用`window.open()`函数:这种方法通常在需要新开窗口时使用,但当尝试通过POST方法传递数据或遇到跨域问题时,浏览器会拦截弹出窗口。此外,大多数浏览器都会对这种行为进行限制。 2. 表单提交结合`_blank`...
在某些情况下,如在Ajax请求完成之后才尝试打开新窗口,由于请求是异步的,浏览器无法确定用户是否真正触发了这个行为,因此可能将其视为非用户主动的操作并进行拦截。 **解决办法一:预先打开窗口** 这种方法的...
然而,有时浏览器可能会拦截`window.open()`调用,特别是在Ajax回调中执行时,因为这可能被认为是跨窗口脚本注入的恶意行为。为了解决这个问题,我们可以将`window.open()`调用移出Ajax请求的回调,而是等待请求完成...
然而,在使用AJAX时,开发者可能会遇到一些问题,比如在AJAX的`oncomplete`事件中打开新窗口时被浏览器的弹窗拦截器(popup blocker)阻止。这个问题在标题为"技術分享_ajax_oncomplete_開新視窗1"的讨论中被提出,...
在使用ajax进行数据请求后,如果需要在获取数据后跳转到新页面,可能会遇到浏览器拦截的问题。解决方法是先使用window.open()打开一个新窗口,但不立即跳转,而是在数据获取成功后,通过JavaScript修改新窗口的...
当需要在JavaScript中使用POST方法打开新窗口时,可以使用jQuery的`$.ajax()`方法配合`window.open()`,但考虑到浏览器的弹窗限制,更好的选择是通过模拟表单提交的方式,这既满足了POST数据的需求,又能够避免被...
在这个例子中,`$("#openButton")`选择了ID为"openButton"的按钮,当用户点击按钮时,`window.open()`会创建一个新窗口,并指定其大小。`newWindow.document.write()`则向新窗口写入HTML内容。 接下来,如果想要...
要注意的是,现代浏览器通常会有 pop-up blocker(弹出窗口阻止器)功能,如果用户没有禁用这个功能,那么使用`window.open()`打开的新标签页可能会被浏览器自动拦截。因此,在实际应用中,我们需要考虑这种可能,并...
1. **打开新窗口**:`window.open()`函数是JavaScript用来打开新窗口的命令。它的基本语法是`window.open(url, name, features)`。其中,`url`是要打开的页面地址,`name`是新窗口的名称,`features`是新窗口的特性...
`window.open`是创建新窗口的核心函数,其语法结构如下: ```javascript window.open(url, name, features); ``` - **url**:表示新窗口中要加载的页面地址。 - **name**:表示新窗口的名字。可以用来标识特定的...