2010-06-01 4 views
4

jcarousel에서 이미지 위로 마우스를 가져 가면 내 사이트는 내용이 ajax를 통해로드되는 팝업을 표시합니다. 나는 내가 생각하는 것을 상당히 간단하게하고있다. xhrRequest 객체에 대한 핸들을 유지하고 새 요청을 만들기 전에 기존 객체를 중단합니다.인터넷 익스플로러에서만 ajax 호출을 중단 할 때 jQuery 오류

function showPopup { 
    // ... code snipped ... 

    // cancel the existing xhr request 
    if (showPopup.xhrRequest != null) { 
    showPopup.xhrRequest.abort(); 
    showPopup.xhrRequest = null; 
    } 

    showPopup.xhrRequest = $.ajax({url: url, 
           type: "GET", 
           success:function(data) { 
            $("#popup-content").html(data); 
           } 
           }); 

    // ... code snipped ... 
} 
showPopup.xhrRequest = null; 

가 큰 작품 :

그것은 내가 오류 여기

"개체가이 속성 또는 메서드를 지원하지 않습니다"를받을 IE를 제외한 모든 브라우저에서 잘 작동 그것을 트리거되는 코드입니다 Firefox 및 Chrome 나는 아래로 (jQuery를 내 사본 라인 5233) 아약스 함수 내에서 jquery.js 코드의 비트 오류를 ​​추적 :

특정 오류가 oldAbort.call (XHR) 라인에서 발생
// Override the abort handler, if we can (IE doesn't allow it, but that's OK) 
// Opera doesn't fire onreadystatechange at all on abort 
try { 
    var oldAbort = xhr.abort; 
    xhr.abort = function() { 
    if (xhr) { 
     oldAbort.call(xhr); 
    } 

    onreadystatechange("abort"); 
} catch(e) { } 

. 어떤 아이디어?

답변

5

은 JQuery와 포럼에이에 대한 답을 찾을. 여기에 설명을 참조하십시오 : http://forum.jquery.com/topic/object-doesn-t-support-this-property-or-method-from-jquery-1-4-1-in-ie7-only

해결 방법을 아래에 IE7과에 대해 :

$.ajax({ 
    ... 
    xhr: function() { 
     if ($.browser.msie && $.browser.version.substr(0,1) <= 7) 
      return new ActiveXObject("Microsoft.XMLHTTP"); 
     else 
      return new XMLHttpRequest(); 
    }, 
    ... 
}); 
+5

사용하지 마십시오. 즉 10에서 실패합니다. –

2

문제는 Internet Explorer 용 jQuery에서 제공하는 XMLHttpRequest 객체가 기본 window.XMLHttpRequest 객체가 아니라 COM 구현으로 기본 설정되어 있고 해당 메서드를 재정의 할 수 없다는 것입니다.

또한 동일한 시나리오에서 abort 메서드는 Javascript 함수가 아니므로 프로토 타입 및 call 메서드가 없습니다. abort은 IE7의 기본 XMLHttpRequest 개체와 함께 도입 되었기 때문에 ActiveX 구현에서 전혀 사용할 수 없습니다.

네이티브 XMLHttpRequest는 IE7에서 소개되었으므로 IE6에서는 작동하지 않으며 IE7/IE8의 일부 사용자에게는 작동하지 않습니다. 기본 설정이 XMLHttpRequest 인 경우 이전에이 문제를 접했다.)

당신은 $.ajax() 또는 $.ajaxSetup()xhr 옵션을 사용하여 jQuery를에 기본값을 변경할 수 있습니다

XHR
콜백을 XMLHttpRequest 객체를 생성. 사용 가능한 경우 (ActiveX) 인 경우 기본값 인 ActiveXObject, 그렇지 않은 경우 XMLHttpRequest입니다. XMLHttpRequest에 대한 사용자 고유의 구현 또는 팩토리에 대한 기능 향상을 제공하도록 재정의합니다.

(강조 광산)

+0

중단을 지원하는 데 사용할 수있는 표준 jQuery 생성자 함수가 있습니까? IE에서이 문제를 해결할 방법이 없다면 적어도 자동으로 실패 할 수있는 기능이 있습니까? 감사합니다. –

+0

@ Rob Crowell : 이전에는 이것을 알아 채지 못했지만 IE7에서는 abort() 메소드가 도입 되었기 때문에 ActiveX 구현에는 존재하지 않습니다. try/catch를 감싸서 자동으로 실패 할 수도 있습니다. –

2

나는 IE7에서이 문제를 가지고 내 응용 프로그램에서 다음과 같은 해결 방법을했다.

ajax 요청을 jqXHR 어딘가에 저장하고 jqHXR 매개 변수가 저장 한 콜백과 일치하는 경우에만 콜백 가져 오기가 호출 될 때.

doit = function(){ 
    $("#target").data("req",$.getJSON(an_url, 
     {}, 
     function(msg,status,xhr){ 
      if(xhr===$("#target").data("req")){ 
       $("<li/>").text(msg).appendTo("#target"); 
       doit(luku); 
      } else { 
       $("<li/>").text("aborted!").appendTo("#target"); 
      } 
     })); 
} 

다른 곳에서 예를 들어 호출 할 수 있습니다.

$("#target").data("req",false); 

보류중인 요청을 "취소"합니다.

관련 문제