`

在Ajax回调函数中请求以window.open()的方式请求新页面会被拦截

阅读更多
项目中的应用场景是点击用户姓名,如果用户存在打开新窗口展示用户详情页面,如果用户在详情页面被删除,再次点用户姓名弹框提示此用户已被删除;代码写好后测试时发现打开新页面请求被浏览器拦截。代码如下:
        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请求的回调函数中执行`window.open()`,浏览器会认定这不是用户主动的行为,从而拦截新窗口的打开。尝试在Ajax回调中模拟用户点击事件(如`$(element).trigger('click')`)...

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

    在网页开发过程中,有时会遇到使用JavaScript的`window.open`函数打开新窗口被浏览器拦截的情况。这通常是由于浏览器的安全策略导致的,特别是像Chrome这样的现代浏览器,为了防止弹窗广告等不良用户体验,对`window...

    ajax请求成功后新开窗口window.open()被拦截解决方法

    在网页开发过程中,有时我们需要在Ajax请求成功后执行某些操作,比如打开一个新的窗口来展示返回的数据。然而,当使用`window.open()`方法时,如果这个操作不是由用户的直接交互(如点击按钮)触发,浏览器出于安全...

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

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

    js实现window.open不被拦截的解决方法汇总

    今天在处理页面ajax请求过程中,想实现请求后打开新页面,就想到通过 js window.open 来实现,但是最终都被浏览器拦截了。 二、分析: 在谷歌搜索有没有解决方法,有些说可以通过新建a标签,模拟点击来实现,但是...

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

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

    弹出窗体被拦截解决方案

    1. 使用`window.open()`函数:这种方法通常在需要新开窗口时使用,但当尝试通过POST方法传递数据或遇到跨域问题时,浏览器会拦截弹出窗口。此外,大多数浏览器都会对这种行为进行限制。 2. 表单提交结合`_blank`...

    Ajax打开新窗口被浏览器拦截的两种解决办法

    在某些情况下,如在Ajax请求完成之后才尝试打开新窗口,由于请求是异步的,浏览器无法确定用户是否真正触发了这个行为,因此可能将其视为非用户主动的操作并进行拦截。 **解决办法一:预先打开窗口** 这种方法的...

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

    然而,有时浏览器可能会拦截`window.open()`调用,特别是在Ajax回调中执行时,因为这可能被认为是跨窗口脚本注入的恶意行为。为了解决这个问题,我们可以将`window.open()`调用移出Ajax请求的回调,而是等待请求完成...

    技術分享_ajax_oncomplete_開新視窗1

    然而,在使用AJAX时,开发者可能会遇到一些问题,比如在AJAX的`oncomplete`事件中打开新窗口时被浏览器的弹窗拦截器(popup blocker)阻止。这个问题在标题为"技術分享_ajax_oncomplete_開新視窗1"的讨论中被提出,...

    JS弹出新窗口被拦截的解决方法

    在使用ajax进行数据请求后,如果需要在获取数据后跳转到新页面,可能会遇到浏览器拦截的问题。解决方法是先使用window.open()打开一个新窗口,但不立即跳转,而是在数据获取成功后,通过JavaScript修改新窗口的...

    js使用post 方式打开新窗口

    当需要在JavaScript中使用POST方法打开新窗口时,可以使用jQuery的`$.ajax()`方法配合`window.open()`,但考虑到浏览器的弹窗限制,更好的选择是通过模拟表单提交的方式,这既满足了POST数据的需求,又能够避免被...

    用jquery实现打开自定义窗口

    在这个例子中,`$("#openButton")`选择了ID为"openButton"的按钮,当用户点击按钮时,`window.open()`会创建一个新窗口,并指定其大小。`newWindow.document.write()`则向新窗口写入HTML内容。 接下来,如果想要...

    jQuery打开多个标签页

    要注意的是,现代浏览器通常会有 pop-up blocker(弹出窗口阻止器)功能,如果用户没有禁用这个功能,那么使用`window.open()`打开的新标签页可能会被浏览器自动拦截。因此,在实际应用中,我们需要考虑这种可能,并...

    打开关闭窗口基于javascript语言

    1. **打开新窗口**:`window.open()`函数是JavaScript用来打开新窗口的命令。它的基本语法是`window.open(url, name, features)`。其中,`url`是要打开的页面地址,`name`是新窗口的名称,`features`是新窗口的特性...

    javascript弹出窗体

    `window.open`是创建新窗口的核心函数,其语法结构如下: ```javascript window.open(url, name, features); ``` - **url**:表示新窗口中要加载的页面地址。 - **name**:表示新窗口的名字。可以用来标识特定的...

Global site tag (gtag.js) - Google Analytics