2012-10-29 3 views
1

ajax "fire and forget"호출을 수행하려고 할 때 firefox 15.0.1에 문제가 있습니다. 기본적으로 사용자가 페이지를 닫거나 리디렉션 할 때 아약스 호출을 수행하려고합니다. Chrome 및 IE에서는 Charles에서 요청을 볼 때 제대로 작동하는 것으로 보입니다. 그러나 FireFox에서는 아약스 호출이 발생하지 않습니다.Firefox 15에서 ajaxing onbeforeunload

jQuery(window).on('beforeunload',function(){ 
    jQuery.ajax({url:'some page', type: 'GET', dataType: 'script'}); 
}); 

console.log 또는 경고가 포함될 때 이벤트가 작동하는 것으로 알고 있습니다. 언로드하기 전에이 아약스 호출을 수행 할 수있는 충분한 시간이있는 것처럼 보이지 않습니다. 누구든지 이에 대해 의견이 있거나 해결 방법이 있습니까?

+4

호출이 완료되기 전에 페이지가 남아 있으면 AJAX 호출이 중단됩니다. 당신이 가진 유일한 해결책은 동 기적으로 만드는 것입니다.하지만 이상하지는 않다고 생각합니다. – Ian

+0

당신이 언급 한 것처럼 "발사하고 잊어 버리는"방법을 알고 싶었지만, 당신이 그 행동을 무시할 수 있다고 생각하지 않습니다. 브라우저를 사용하면 너무 빨리 페이지를 나가면 자동으로 중단됩니다. 이것이 제대로 작동하는지 확신 할 수 없지만 AJAX 요청을 보낸 다음 잠시 동안 (예 : 1 초) while 루프를 실행하면 브라우저에서 끝내고 (페이지/사용자를 "동결 시켜서 짜증나게 할 수있다") AJAX 요청이 서버에 전달되도록 충분한 시간을 남겨 둘 수있다. 다시, 이상적이지 않다. – Ian

답변

0

onbeforeunload 이벤트에서 호출 할 수있는 ajax 호출을 수행 할 다른 html 페이지를 작성할 수 있습니다.

새 페이지가 작업을 수행하고 완료되는 즉시 닫습니다.

jQuery.ajax({ 
    url: 'http://abcexample.com/getInfo', 
    success: function(result) { 
        if(result.isOk == false) 
         alert(result.message); 
       }, 
    async: false 
}); 

그러나 동기 호출이 더 가기 전에 완료 될 호출을 기다리는 것 : 아래 그림과 같이

또 다른 방법은 동기 아약스 호출을 사용하는 것입니다. Ajax 호출이 수행하는 작업을 실행하고 잊어 버리고 싶다면 첫 번째 방법이 효과적입니다.

관련 문제