2010-02-02 3 views
5

버튼을 클릭 한 후 Ajax 호출을 시작한 다음 Ajax 결과를 기다리지 않고 다른 페이지로 리디렉션하려고합니다. 가능한가? 내 코드는 다음과 같습니다.jQuery Ajax : 결과를 기다리지 않고 다른 페이지로 리디렉션

$('button').click(function(){ 
    $.get('mailer.php', function(){ 
     window.location.replace("result.php"); 
    }); 
}); 

위의 코드는 리디렉션 전에 ajax 결과를 기다립니다. 나는 아약스를 등뒤로 움직여서 다른 페이지로 이동할 수 있습니까?

+0

+1 @ StackOverflow에 오신 것을 환영합니다! – Sampson

답변

2

당신이 AJAX-ing하고있는 스크립트가 전자 메일을 보내는 것처럼 보입니다. 이 작업이 완료 될 때까지 기다리는 것이 사용자의 시간 지연을 초래할 수 있음을 알 수 있습니다. 다음은이 문제를 일반적으로 해결하는 방법입니다.

mailer.php 스크립트가 즉시 전자 메일을 보내는 대신 db에 메시지 데이터를 저장하십시오. AJAX 호출 중에는 전자 메일을 보내지 마십시오. 이렇게하면 사용자가 매우 빠르게 처리 할 수 ​​있습니다.

그런 다음 DB에 저장된 전자 메일을 보내기 위해 특별히 만든 스크립트를 가리키는 CRON 작업을 설정할 수 있습니다.

의미가 있습니까?

+0

감사합니다! 옥수수 일이 내 상황을 처리하는 더 좋은 방법 같습니다 :) – Kelvin

2

다른 페이지로 이동하면 서버 연결이 끊어 지거나 브라우저가 그렇게하지 못하게하는 규칙이 없어서 작업이 완료되지 않을 수 있습니다. 간단히 말해서 : 당신은 기다려야합니다.

+1

동의합니다. AJAX 요청에 오류가있어서 양식/데이터를 다시 보내야하는 경우 어떻게됩니까? 결과를 기다린 다음 AJAX 요청의 응답을 기반으로 다른 페이지로 리디렉션하는 것이 가장 좋습니다. –

1

즉시 퇴장하면 요청이 포기됩니다. jquery ajax 요청에 의해 시작된 프로세스를 유지하려면 서버에 논리를 포함해야한다.

예를 들어 PHP에서 true으로 설정하면 사용자가 요청을 중단 한 후에도 프로세스를 계속 수행하는 ignore_user_abort() 기능이 있습니다.

+0

위치가 변경 되었기 때문에 브라우저가 요청을하지 않는 경우 어떻게해야합니까? 요청을 시작할 것이라고 보장 할 수는 없습니다. 대기 시간 때문에 그 중 절반 (예 : exaple의 첫 번째 2 개 헤더)이 전송되면 어떻게됩니까? –

+0

OP에 따르면, 요청은 * 위치를 변경하기 전에 이루어집니다. – Sampson

관련 문제