新窗口的 Ajax 异步调用

Posted

技术标签:

【中文标题】新窗口的 Ajax 异步调用【英文标题】:Ajax async call for new window 【发布时间】:2022-01-09 21:46:49 【问题描述】:

今天我有一些关于 jquery ajax 异步工作的问题。我对 js 非常陌生,尤其是 jquery。

单击按钮后,新选项卡打开并填充了相当长的请求(返回了大量数据)并冻结站点的其他部分(选项卡 wi 按钮),直到请求完成。 有没有可能让它异步工作,所以我的旧选项卡在请求计算时可以工作?

当前打开新窗口的js代码

window.open(request, '_blank')

哪个明显不是异步的

可能是这样的

Var O = window.open() ; O.阿贾克斯(blablabla)

更新:

我通过使用 rel="norefferer" 创建新元素并模拟单击该元素来解决问题,因此新标签将在新进程中打开并且不会阻塞主标签

【问题讨论】:

嗨,欢迎来到 SO。您将需要向我们提供更多详细信息。首先,request 到底是什么?从您的问题来看,这听起来不仅仅是一个简单的url。所以也许这就是你的解决方案 - 提供一个 url 并从服务器加载数据(按照正常请求异步)。请记住,javascript单线程,因此如果您对新窗口/选项卡进行任何 js 处理,它将冻结您现有的选项卡。 请求返回大量文本数据(在Java的输出流中直接写很多作为文本)。因此,当它在另一个选项卡上呈现时,它会冻结主选项卡 我认为最简单的答案是:不要。相反,重新考虑你的设计。可能使用模式对话框或让选项卡加载自己的数据。 【参考方案1】:

AJAX 异步的(字面意思是“异步 JavaScript 和 XML”)。

你只需要正确使用它,如下:

$.ajax(
    url: "https://www.example.com",
    "success": function(result) 
        // This part will be called after the ajax request was successful
        /* 
        insert your code here, 
        but be aware that, as CBroe noted in the comments, 
        window.open() could be blocked by modern browser 
        */
    
 );

阅读the jquery documentation on AJAX了解更多信息。

【讨论】:

你的猜测和我的一样好......据我了解,OP 想要在异步调用成功后执行 window.open() 。但问题很模糊,“如何使 ajax 异步工作”没有任何意义,所以我试图澄清。 “您只需要正确使用它,如下所示” - 虽然这并不适合开始。如今,大多数浏览器在默认设置下,将阻止任何未打开的弹出窗口,这些弹出窗口直接与用户交互(例如点击)相关联。如果有的话,您需要在 AJAX 请求之前打开一个“空白”弹出窗口(因此直接与用户触发整个过程的点击操作相关联),然后写入请求的结果之后进入弹出窗口。 在我看来,永远不应该使用弹出窗口...我的回答是关于 AJAX,OP 试图用它做什么不是我关心的问题。我编辑了我的回答,将您的评论包含在其中。 可能是我对问题的解释很奇怪。我会再尝试。现在我有按钮,单击它会打开带有请求的新选项卡,用大量文本填充这个新选项卡。处理此选项卡时,我的带有按钮的选项卡冻结了。所以我想打开新标签并调用文本请求,但继续使用主标签,所以我想在第二个标签上进行异步请求 然后我建议打开一个空的弹出窗口,其中仅包含加载内容所需的 ajax 请求。 Ajax 请求不应在主页上启动。

以上是关于新窗口的 Ajax 异步调用的主要内容,如果未能解决你的问题,请参考以下文章

填充某些属性的javascript异步调用

Ajax异步调用的顺序执行

extjs 组合框 afterrender() 一起调用导致异步 ajax 调用

Ajax 的异步调用和批量修改

从动态加载的页面调用的 AJAX 返回异步结果

Ajax的同步和异步调用