2009-04-28 8 views

답변

7

아니요. 분명히 간단한 방법은 없습니다.

몇 가지 복잡한 방법을 생각할 수 있지만 신뢰할 수는 없습니다.

당신은 아마 더 행운을 반전 하기위한 프로세스를 개발하고있을거야 그냥 (I가 당신이 그것을 중지 할 것입니다 이유입니다 있으리라 믿고있어.)

+0

발견 xhr.abort()

솔루션 힌트 후로드 본 이유는 DB에 수정을 할 그래서 정말 자원을 복용 긴 프로세스를 중지하는 것 . 응답을위한 thx – AndreLiem

+1

zombat에서 언급했듯이 긴 프로세스라면 뭔가 할 시간이 있지만 아파치 스레드를 식별하는 것은 매우 어려울 수 있습니다. 실행 스크립트를 요청에 연결하기 위해 어떤 종류의 저장 메커니즘을 설정해야합니다. 요청은 일종의 고유 ID를 포함해야합니다. 데이터베이스에 해당 연결을 저장 한 경우 취소 된 것으로 플래그를 지정하는 두 번째 요청을 보낸 다음 실행중인 스크립트에서 해당 데이터베이스 레코드를 주기적으로 폴링하여 작업을 중지 할 수 있는지 확인할 수 있습니다. 매우 복잡하고 오류/악의적 인 활동이 발생할 가능성이 큽니다. –

0

가장 쉬운 실행 한 요청의 변경 503 (또는 유사한) HTTP 응답 헤더를 보내고 서버 측 응용 프로그램을 중단하거나 응용 프로그램을 중단하는 것만으로도됩니다. 데이터가 보내지지 않았거나 HTTP 응답 헤더 클라이언트 측을 검사했다면 그 요청을 실패한 요청으로 처리 할 수 ​​있습니다.

0

짧은 대답은 "아니오"입니다. 서버 측에서 매우 오래 실행중인 백그라운드 프로세스에 대해 이야기하고있는 경우가 아니라면 두 번째 Ajax 요청을 통해 중지를 시작할 수 있습니다. 하지만 아파치/PHP 서버에 대한 일반적인 요청에 대해 이야기하고 있다면, 요청한 아파치 스레드를 식별하는 것은 문제가 될 것이다.

프로세스 시작 전에 어떻게 든 Ajax 요청을 확인하는 것이 훨씬 쉬울 것입니다. 그것이 당신이 원하는 것을 실행하고 있는지 확인하십시오. 사용자가하고있는 일이 중단 될 수 없다는 사실을 사용자가 알고 있어야하는 경우 Javascript 확인 ​​프로세스를 사용할 수도 있습니다.

스티븐 (Steven)이 게시 한 것처럼, 리버스 프로세스를 수행하는 것이 가장 큰 관심사 인 것처럼 들릴 수도 있습니다.

4

다른 Ajax 요청을 시작하십시오. 이 스레드는 이전 요청이 다른 요청에 의해 중단되는 것을 방지하는 방법을 찾아 내려고했습니다.

1

많은 사람들이 말했듯이 네트워크를 통해 요청 자체를 중지하는 좋은 방법은 없지만 요청의 영향을 비교적 쉽게 막을 수 있습니다. 서버 측에

(또는 스크립트를 죽이기 위해 필요한 모든 용어) 쿠키 또는 세션과 같은 전역 변수 (플래그로 작동)를 지속적으로 확인하여 다시 할 수 있습니다. 스크립트 실행). 또한 파일 또는 데이터베이스 항목을 플래그로 유지하여 존재 여부를 폴링 할 수 있습니다.

클라이언트 측 : abort (다른 브라우저와 마찬가지로 모든 브라우저에서 작동하지 않음)를 호출하거나 콜백 상단에 전역 세마포/플래그를 유지할 수 있습니다 (전역 확인 값이 여전히 실행되어야하는지 여부를 나타냄). 예 :

window.ajaxIsStillGood = true; 

xhr.onreadystatechange = function() 
{ 
    if(4 === xhr.readyState && 200 === xhr.status) 
    { 
     if(true === window.ajaxIsStillGood){ /* still good */ } 
    } 
} 

/* bad stuff happens */ 

window.ajaxIsStillGood = false; // now the code won't execute 
-1

어떻게 그 긴 과정에서 모니터링 특정 $_SESSION VAR를 변경 할 또 다른 Ajax 요청을 보내기에 대한?

0

PHP의 경우 session_write_close();을 사용하여 중지하거나 중단 할 수있는 방법을 발견했습니다. 스크립트에 session_start() 뒤에 넣으십시오. framwework 또는 OOP를 사용하는 경우 메서드의 첫 번째 줄로 유지하십시오. 이는 ajax가 끝날 때까지 세션 데이터가 잠겨 있기 때문에 발생합니다.

테스트 & 다른 페이지가 지금 여기 Abort Ajax requests using jQuery

관련 문제