【问题标题】:AjaxComplete not workingAjaxComplete 不工作
【发布时间】:2013-12-16 05:26:26
【问题描述】:

我正在研究用于打印 IFrame 的 Opera 解决方法。现在我们都知道,打印 Iframe 的唯一方法是在新窗口中打开它,然后打印它。我面临的问题是,当我的 IFrame 在新窗口中打开时,会触发一系列 ajax 调用,我想在所有 ajax 调用完成后打开打印窗口。我搜索了一下,发现了全局回调事件ajaxComplete。我的代码是这样的:

if($.browser.opera){
            var href = $("iframe:visible")[0].contentWindow.location.href;
            var printWindow = window.open(href, "printWindow", "scrollbars=yes");
            printWindow.onload = function(){
                $(this.document.getElementsByClassName("f-buttons")).hide();
                $(this.document.getElementsByClassName("f-progress")).hide();

            }
            $(printWindow.document.body).ajaxComplete(function( event, xhr, settings ){
                printWindow.print();
            });
            $(printWindow).ajaxComplete(function( event, xhr, settings ){
                printWindow.print();
            });


        } 

我不确定为什么一开始没有触发事件所以我也在身体上试过这个,但它没有被初始化。谁能告诉我我错过了什么?

【问题讨论】:

  • 您的问题是 document.body 它在该页面上执行所有 ajax。
  • @Mr.G -- 对不起,我没有找到你。

标签: javascript jquery ajax


【解决方案1】:

来自 jQuery 文档,第一个:

从 jQuery 1.8 开始,应该只附加 .ajaxComplete() 方法 记录。

第二个:

如果调用 $.ajax() 或 $.ajaxSetup() 并将全局选项设置为 false,.ajaxComplete() 方法不会触发。

我看不到您如何调用 AJAX,但我可以看到您将 ajaxComplete 方法附加到“正文”而不是文档所说的“文档”。

试试这些,让我知道发生了什么。

【讨论】:

  • True... 我将 ajaxComplete 更改为 ajaxStop,因为我希望在所有 ajax 调用完成后打开打印窗口。现在,由于 $.ajax() 需要全局选项为真,默认情况下始终要确认我在 onload 回调下调用假 ajax 调用 $.ajax({global:true})。它似乎有效,但我不知道是否将 ajaxStop 附加到文档或正文。哪一个是正确的方式?
  • 好吧,如果您将 ajaxComplete 附加到“文档”,我会说也将 ajaxStop 附加到“文档”。
  • 我面临另一个问题,即 onload 在处理程序附加到事件回调之前触发。你能告诉我最后发生的事件吗……?
猜你喜欢
  • 1970-01-01
  • 2015-07-24
  • 2011-05-24
  • 1970-01-01
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多