我有一個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函數完成時打開彈出窗口的解決方案?