2012-12-01 8 views
0

저는 cURL을 사용하여 XML을 다운로드하는 ajax.php 파일로 Ajax 요청을 보냅니다.ajax 요청에서 cURL을 중단합니다.

//ajax.php 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_USERPWD,  USERNAME.':'.PASSWORD); 
curl_setopt($ch, CURLOPT_POSTFIELDS, getData()); 
curl_setopt($ch, CURLOPT_URL,  $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT,  true); 
$data = curl_exec($ch); 

echo $data; 

사용자가이 프로세스에 대해 확인되지 않아 웹 페이지가 새로 고침 될 수 있습니다.

가끔 curl_exec($ch)에 걸리는 시간이 오래 걸리며 timeout 오류가 발생합니다. 이 오류로 인해 스크립트가 계속 실행되지 않습니다. 저는이 문제를 해결하기 위해 정확한 해결책을 찾지 못했습니다.

이제는 더 큰 문제는 아약스 요청이 백그라운드에서 처리되고 사용자가 페이지를 새로 고치는 동안 더 큰 문제는 아약스 요청 시간 초과 또는 종료까지 새로 고침되지 않는 것입니다.

페이지를 새로 고칠 때 해당 cURL 요청을 중단하는 것이 좋은 임시 해결 방법이지만이를 수행하는 방법을 알지 못한다고 생각했습니다.

참고 : jQuery를 사용하여 Ajax 요청을 설정하고 중단합니다. ajax.abort()이 문제를 해결하지 못했습니다.

+0

당신은 자신의 질문에 대답 할 수 있다는 것을 알고 있습니까? – wormhit

+0

@wormhit 친구 완료! 어떻게 도움이 될 수 있니? – Omid

+0

많은 사용자가 응답률이 낮아지는 즉시 질문에 답변하지 않습니다. 실제로 귀하의 질문을 조사 할 사용자가 줄어들고 있습니다. 나는 너 또는 아무것도 판단하지 않을거야. 정보 만. – wormhit

답변

-1

try/catch 블록을 사용하여이 (또는 기타) 오류가 발생할 때마다 처리 할 수있는 것을 반환 할 수 있습니다.

+0

나는 cURL 요청을 기다려야하고/catch는 쓸모가 없다. – Omid

0

응용 프로그램에서이 기능을 처리하는 방식을 변경해야합니다. 아약스 호출과 실제 계산 프로세스 사이에 또 ​​다른 추상화 계층을 넣으려고합니다.

예를 들어, ajax 호출은 PHP 백그라운드 프로세스 또는 작업자와의 더 나은 미들웨어 메시지 큐를 초기화 할 수 있습니다. 응답으로 고객의 작업 ID를 제공합니다 (또는 사용자 ID와 연결된 DB에 저장). 그런 다음 onTimeout()은 작업 상태를 얻기 위해 ajax 요청을 실행합니다. 그 동안 백그라운드 프로세스 또는 미들웨어 작업자가 작업을 처리하고 응답을 동일한 작업 ID로 db에 저장합니다.

따라서 최종 고객은 작업을 초기화 한 후 해당 작업의 상태를 확인합니다. 작업이 완료되면 서버 측에서 작업을 알 수 있습니다. 따라서 다음 아약스 요청시 실제 작업 결과로 응답합니다. Javascript가 결과에 대한 응답을 받고 있으며 클라이언트 측에서 계속 작업중인 콜백 함수를 실행 중입니다.

+0

나는 당신이 문제가 있습니다. 내 질문이 될 수 있습니다 지워지지 않습니다. 나는 아약스 요청 결과 나 세션에 대해 걱정하지 않는다. 문제는 내 프로그램에서 아약스를 호출하는 웹 페이지이며, 아약스 요청이 처리되는 동안 새로 고침되지 않는다. – Omid

관련 문제