当前位置: 首页 > 面试题库 >

jQuery window.open在ajax中成功被阻止

子车成和
2023-03-14
问题内容

尝试在我的Ajax成功调用中打开一个新的浏览器窗口,但是,它作为弹出窗口被阻止。我进行了一些搜索,发现需要将用户事件绑定到window.open上,这样才不会发生。

我也找到了这种解决方案,您可以在ajax之前打开空白窗口,然后在成功调用中按正常方式加载url。

因此,我有两个问题:

1-这是唯一的解决方案,因为我不想打开此空白窗口。

2-如果确实是唯一的方法,那么如何将html加载到新窗口中?例如,如果我的ajax不成功,由于无法打开url,如何将错误文本添加到此空白窗口中?

我还应该注意,我不想使ajax调用同步…这违背了ajax的目的,并且我认为如果不这样做的话,这将不被赞成…如果我在搜索中读错了,请纠正我。

    $('#user-login').on('click', function () {
        var $form = $(this).closest('form');
        window.open('about:blank', 'myNewPage');

        $.ajax({
            type: 'post',
            url: '/spc_admin/process/p_user_login.php',
            data: $form.serialize(),
            dataType : 'json'
        }).done(function (response) {

            $myElem = $('#user_login_message'); //performance for not checking dom
            $myElem.fadeOut('fast', function(){

                if (response.success)
                {
                    $myElem.html('<p><b class="text-blue">Success!</b> &nbsp;You have been logged in as \'<b>'+response.username+'</b>\' in a new browser window.</p>').fadeIn('fast');

                    // open new window as logged in user
                    //window.open('http://www.example.com/');
                    window.open('http://www.example.com/', 'myNewPage');
                } 
                else
                {
                    $myElem.html('<p><b class="text-red">Error!</b> &nbsp;Please select a valid user from the dropdown list.</p>').fadeIn('fast');
                }               
            });
        });
    });

编辑:

对于任何有兴趣的人…这是我想出的解决方案。新窗口需要一个名称,因此连续单击将在同一窗口中打开,而不是重复打开新窗口。添加html与答案中给出的稍有不同,并且可以正常工作。窗口模糊不起作用,因此不存在。从我发现,这是不可控制的,是浏览器。

    $('#user-login').on('click', function () {
        var $form = $(this).closest('form');

        //open blank window onclick to prevent popup blocker
        var loginWindow = window.open('', 'UserLogin');

        $.ajax({
            type: 'post',
            url: '/spc_admin/process/p_user_login.php',
            data: $form.serialize(),
            dataType : 'json'
        }).done(function (response) {

            $myElem = $('#user_login_message'); //performance for not checking dom
            $myElem.fadeOut('fast', function(){

                if (response.success)
                {
                    // show success
                    $myElem.html('<p><b class="text-blue">Success!</b> &nbsp;You have been logged in as \'<b>'+response.username+'</b>\' in a new browser window.</p>').fadeIn('fast');

                    // open new window as logged in user
                    loginWindow.location.href = 'http://www.example.com/';
                } 
                else
                {
                    // show error
                    $myElem.html('<p><b class="text-red">Error!</b> &nbsp;Please select a valid user from the dropdown list.</p>').fadeIn('fast');

                    // add error to the new window (change this to load error page)
                    loginWindow.document.body.innerHTML = '<p><b>Error!</b> &nbsp;Please select a valid user from the dropdown list.</p>';
                }               
            });
        });

问题答案:

要在您打开的窗口中打开新的URL onclick,请执行以下操作

  1. 将您创建的新窗口存储在变量中 var newWindow = window.open("","_blank");
  2. 更改新窗口的位置 newWindow.location.href = newURL;

可以改善用户体验的另一件事是,newWindow.blur在打开新窗口后立即将新窗口发送到后台(),然后再次将其置于前台(newWindow.focus),同时打开新窗口的URL。



 类似资料:
  • 问题内容: 谷歌浏览器似乎阻止了我通过jQuery创建的弹出窗口。经过一番调查,在ajax调用成功的情况下,调用似乎是一个问题。有没有解决的办法?我的jQuery ajax调用返回要打开的URL。所以我有点卡住。 如果我将外部ajax调用置于外部,它将起作用;但是,在内部(即成功事件中)它被阻止。我认为这与上下文有关,但我不确定。 这是我所拥有的: 问题答案: 只需在成功回调中打开新窗口: 请注意

  • 问题内容: 我正在使用Ajax发布将表单数据提交到服务器,进行验证,然后根据数据是否有效并可以存储返回一条消息。我的ajax帖子中的成功功能没有运行。这是ajax帖子和成功消息的显示: 标签上没有显示任何消息。我尝试在代码中将successmessage变量设置为一个设置值,并且显示效果很好,所以成功函数一定存在问题,我看不到什么?我也尝试设置错误回调,如下所示: 但是仍然没有消息显示。 问题答案

  • 问题内容: 我想绑定到一个ajax“事件”,这意味着我希望只要成功检索到一个ajax响应就触发它。我不知道如何绑定这样的事件。我需要像这样使用吗? PS我确实需要使用,因为整个页面是通过ajax调用插入的。 问题答案: 您可以使用 或绑定到

  • 问题内容: 我正在使用jQuery的功能来提交可以正常工作的表单,但是成功是我遇到问题的地方。这是我的代码: 我遇到的问题是该函数不断说dataCheck不等于 value 。我知道是的,因为删除页面时按预期显示了 value 。另外,我之前使用了几乎相同的代码,这可以正常工作。有人可以给我一些建议吗? 问题答案: 如何自己找到答案: 放置调试代码以查看从服务器获得的信息。 它可能采用您认为不是的

  • 问题内容: 在文档中,列出了如果触发回调时textStatus可能是的可能值的列表(“超时”,“错误”,“未修改”和“ parsererror”),但未为事件指定任何内容。 除了“成功”之外,还有其他可以传递给回调的值吗?这在任何地方都有记录吗? 问题答案: 并记录在这里。您实际上不必担心将什么textStatus传递给函数,它们都是自动处理的。当/如果调用成功,将调用成功函数,而在其他所有操作的

  • 问题内容: 当用户单击按钮时,我想返回一些数据并遍历JSON,以便可以将结果附加到表行。 此时,我只是想让我的循环正常工作,这是我的代码。 我的JSON返回如下:{“ COLUMNS”:[“ username”,“ password”],“ DATA”:[[“ foo”,“ bar”]]} 我收到jQuery(第16行,未定义)错误。我究竟做错了什么? 问题答案: 假设你是这样的 您可以这样查询