완료하는 데 약간의 시간이 걸리는 AJAX 기능이 있습니다. 작업이 끝나면 결과가 표시된 새 탭을 열고 싶습니다. 나는 세 가지 옵션 해낸 적이 이렇게하려면 :자바 스크립트에서 setTimeout을 사용하여 PHP의 잠자기 시뮬레이트
- 사용 window.open()로부터 자바 스크립트 기능/이벤트 트리거에
- 사용 window.open()를 AJAX-호출합니다.
- javacript 함수/이벤트 트리거 내의 setTimeout-function에서 window.open()을 사용하십시오. 크롬에서
- 창 :
문제는이 트릭을 할해야 모든 주요 브라우저 (IE, 크롬, 파이어 폭스와 사파리) 및 옵션 3와 함께 작동해야하지만 원치 않는 부작용이입니다 새 탭에는 열리지 않지만 팝업으로 열립니다.
- Safari에서 내부 팝업 방지가 활성화됩니다. 팝업이 열리지 않습니다. (source가)
가 지금은 절차 적 코드의 조각으로의 setTimeout()를 사용하여 결말을 생각 몇 가지 같은 :
는$('.selector').click(function() {
doAjaxCall();
setTimeout(function(){ }, 150);
window.open(...);
});
글쎄,이 사파리하지만 크롬과 파이어 폭스 작동 무시하는 것 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에 붙어있어 내 경우에는, 그래서 나는 할 수 없습니다 jQuery의 ajax 솔루션을 사용한다.
개선 방법에 대한 제안 사항이 있으십니까? ajax-function이 완료되었을 때 모든 주요 브라우저가 팝업을 열어주는 해결책이 있습니까?