我有一个AJAX函数需要一些时间才能完成。完成后,我想打开一个新选项卡并显示结果。要做到这一点,我想出了三个选项:在javascript中使用setTimeout来模拟php的睡眠
- 使用window.open()从AJAX呼叫
- 使用window.open()的JavaScript函数/事件触发。
- 在javascript 函数/事件触发器中的setTimeout函数中使用window.open()。
问题是,这与所有主流浏览器(IE,Chrome浏览器,Firefox和Safari)和选项3工作应该做的伎俩,但有不必要的副作用:
- 在Chrome浏览器窗口不是在新标签中打开,而是弹出。
- 在Safari中,内部弹出式预防功能被激活;导致 不能打开弹出窗口。 (source)
现在我想通使用的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函数完成时打开弹出窗口的解决方案?