新窗口的 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 异步调用的主要内容,如果未能解决你的问题,请参考以下文章