我有一个 AJAX 功能,需要一些时间才能完成。完成后,我想打开一个带有结果的新选项卡。为此,我提出了三个选项:
- 使用来自 AJAX 调用的 window.open()
- 在 javascript 函数/事件触发器中使用 window.open()。
- 在 javascript 函数/事件触发器中的 setTimeout-function 中使用 window.open()。
问题是这必须适用于所有主要浏览器(IE、Chrome、Firefox 和 Safari),选项 3 应该可以解决问题,但会产生不必要的副作用:
- 在 Chrome 中,该窗口不是在新选项卡中打开,而是作为弹出窗口打开。
- 在 Safari 中,内部弹出防止被激活;导致无法打开弹出窗口。(来源)
现在我想将 setTimeout() 用作一段程序代码并最终得到一些类似的东西:
$('.selector').click(function() {
doAjaxCall();
setTimeout(function(){ }, 150);
window.open(...);
});
好吧,这适用于 Safari,但 Chrome 和 FireFox 似乎忽略了 setTimeout() 并直接继续到 window.open()。这就是我的问题;当 window.open() 被调用时,必须使用的数据并不总是最新的。
所以,我在这里。回归本源。弄清楚症状是什么,知道我探索的场景的缺点并最终得到这样的结果:
$('.selector').click(function() {
doAjaxCall();
for(i = 0; i <= 100000000; i++) {
// procedural and time consuming so doAjaxCall has enough time to complete
}
window.open(...);
});
就我而言,我坚持使用xajax进行 ajax 处理,所以我不能使用 jQuery 的 ajax 解决方案。
关于如何改进这一点的任何建议?导致在 ajax 功能完成时所有主要浏览器都打开弹出窗口的解决方案?