2014-06-24 3 views
1

내 프로젝트에서 긴 폴링을 사용하고 있습니다. 프로젝트가 실행 중일 때 긴 폴링 요청 중 하나는 서버의 응답을 기다리는 것입니다. 이제 사용자가 새 템플릿을 생성하면 이전의 긴 폴링 호출을 중단하고 새 폴링 호출을 실행해야합니다. IE에서 중단IE9에서 AJAX 요청을 중단 할 때 오류 발생

오류

couldn't complete the operation due to error c00c023f 
내가 jQuery를 사용하지 않으

이전 요청을 중단하는 것은 매우 중요에게 제공합니다. Try and Catch를 시도하여이 오류를 표시하지 못하도록했지만 작동하지 않았습니다.

정상적인 요청 (폴링 요청 아님) 요청이 몇 초 후에 서버에 도달하지 못하면 중단을 사용하고 이전 요청을 중단하고 새 요청을 보냅니다.

각 요청마다 xmlHttp 객체를 배열에 저장합니다. 다른 모든 브라우저에서 완벽하게 작동하는 동안, 나는 IE9에 대한 해결책을 찾을 수 없습니다 array_XMLHttp[index_of_request].abort();

:

처럼 : array_XMLHttp.push(request1);

나는처럼 중단.

업데이트 : 나는 항상 다음과 같이 XMLHTTP 개체의 상태와 readyState가를 확인

:

function checkResponse(xmlHttp){ 
    xmlHttp.onreadystatechange=function(){ 
     if(xmlHttp.readyState==4){ 
      if(xmlHttp.status==200){ 
       // Request received 
      } 
     } 
    } 
}  
다음


내가 요청을 시작하는 방법입니다

// to start new XmlHttp object 
var xmlHttp=crXH();   

// add the request to array to be aborted later if required 
array_XMLHttp.push(request1); 

// initiate the callback 
checkResponse(xmlHttp); 

//send the request to server 
send(xmlHttp); 


나는 중지하는 경우 :

// The problem now the callback function will not read (undefined) the new property added to the aborted object. 
array_XMLHttp[index_of_request].aborted = true; 
array_XMLHttp[index_of_request].abort(); 

여러분의 도움에 감사드립니다! 나는이 주제에 발견했습니다 various articles like this one 당 대답에 우리의 긴 토론을 성문화

+1

가능한 중복 : HTTP : // 유래 .com/questions/7287706/ie-9-javascript-error-c00c023f – jfriend00

+1

해결 방법 : http://answer.techwikihow.com/368561/script575-complete-operation-due-error-c00c023f.html – jfriend00

+0

그것이 중복이라고 생각하지 않습니다. 요청을 중단하면 오류가 발생합니다. 고마워. 내가 살펴볼거야. – moderns

답변

1

...

(가 IE에서 특이한 문제가 아니다), IE는 당신이 xmlHttp에 표준 속성에 액세스 좋아하지 않는다 개체에 .abort()을 호출 한 후에도 여전히 onreadystatechange 이벤트가 트리거되어 이러한 표준 속성에 액세스하려고 시도하므로 오류가 발생할 수 있습니다.

작업 주위에 당신이 .abort()하고 readystatechange 핸들러를 호출 할 때, 먼저 자신의 .aborted 속성을 확인하고이 설정되어있는 경우, 당신이 당신을 호출이 중단되었습니다 알과 xmlHttp 객체에 자신의 속성을 설정하는 것입니다 문제를 일으킬 수있는 다른 속성을 확인하지 마십시오.

당신의 xmlHttp 객체가 x라고한다면, 당신은이 작업을 수행 할 것 :

x.readystatechange = function() { 
    if (!x.aborted) { 
     if(xmlHttp.readyState==4){ 
      if(xmlHttp.status==200){ 
       // Request received 
      } 
     } 
    } 
} 

, 당신은 중단 할 :

x.aborted = true; 
x.abort(); 
+0

그것은 매력처럼 작동합니다! 이 솔루션을 도와 주셔서 대단히 감사합니다. 제공된 위대한 힌트를 감사하십시오. – moderns