2013-11-26 3 views
23

현재 CORS를 사용하여 원격 웹 서비스를 사용하지만 현재 IE 11에서 GET 요청을하는 데 문제가있는 순수 HTML 및 JavaScript 기반 웹 응용 프로그램을 만들고 있습니다. 재미있는 것은 우리는/10 IE8/9에서 잘 작동 가지고있다 그냥 11IE 11의 이상한 AJAX 버그

문제는 IE 11이 나타납니다 시간이 초과하고 서버의 응답을 기다리는하지 않는 것입니다. Ajax 호출은 단순히 :

$.ajax(url, { 
    dataType: 'json', 
    complete: complete, 
    type: 'GET', 
    global: true, 
    success: success, 
    crossDomain: true, 
    xhrFields: { 
     withCredentials: true 
    } 
}); 

네트워크 탭에서 내가 IE를 볼 수 있습니다 피들러를 사용하여 결코 심지어는 요청을 보냅니다.

아무도 아이디어가 있으십니까?

편집 : 나는 이미 캐시를 시도했음을 잊어 버렸습니다. false. 나는 또한 IE에서 지우고 다시 시작한 후에도 캐시가 true인지 false인지에 관계없이 매월마다 호출이 다시 작동하여 Edge에서 9로 문서 도구 모드를 전환하면 매우 이상한 점을 발견했습니다. 매우 기괴한. : \

+0

IE11에 비행 전 OPTIONS 요청에 문제가 있는지 확인할 수 있습니까? 서버에 OPTIONS 요청을 기록 할 수 있습니까? – Halcyon

+0

ajax의 어떤 옵션을 선택하여 디버그할까요? –

+0

여전히 문제가 있는지는 모르겠지만 IE [보안 영역] (http : // stackoverflow)을 확인하십시오.com/questions/3362474/jquery-ajax-cross-domain-calls-in-cross-domain-calls)을 사용하여 CORS를 허용합니까? – rockerest

답변

29

IE는 캐싱으로 유명합니다. 캐시 된 응답을받지 못했는지 확인하십시오. cache 속성 값을 false으로 설정하거나 url에 고유 한 타임 스탬프를 추가하여 캐시 된 응답이되지 않도록 할 수 있습니다. 고유 한 시간 소인을 얻으려면 $.now() 메소드를 사용할 수 있습니다.

식에 의해 반환 된 번호에 대한 속기는

var url="somePage.php?"+$.now(); 
//Use this url now for making the ajax call 

$.now() 방법을 URL로 고유의 타임 스탬프를 추가 캐시 속성

$.ajax(url, { 
    dataType: 'json', 
    cache : false, 
    //Other things ... 
} 

입니다 설정 (new Date).getTime()

+0

답장을 보내 주셔서 감사합니다. 타임 스탬프를 추가하려고했지만 아무런 차이가 없습니다. – Daveo

+0

@Daveo : 스크립트 오류가 발생하고 있습니까? 방화 광을 사용하여 무슨 일이 일어나는지 알아보기 – Shyju

+0

'$ .now()'앞에 물음표가 있어야한다. 그렇지 않으면 url이 깨진다. – qwerty

5

내가 어쩌면 캐싱이야, 잘 모르겠어요, 속성을 설정하려고 "캐시 : 거짓"

그렇지 않으면, 당신은 또한 당신이 매번 그래서, 당신의 URL의 끝에 날짜를 추가 시도 할 수 있습니다 다른 URL 및 IE는 캐시하지 않습니다.

url +""+ (new Date()).getTime() 
2

지역을 실행하는 경우 crossDomain을 false로 전환합니다. 나는 그것에 꽤 많은 시간을 보냈다. Chrome이 crossDomain을 처리했지만 crossDomain을 사용하지 않고 true로 설정 한 경우 IE에서 자동으로 실패합니다.

3

내가이 스레드가 오래 알고 있지만, 그냥이 문제가 발생하는 것들에 대한 추가 검사로, 신뢰할 수있는 사이트 영역 설정이 도메인에서 액세스를 허용하는지 확인 당신의 머리 태그

<meta http-equiv="X-UA-Compatible" content="IE=9,chrome=1"> 
2

이를 사용합니다. "기타"아래의 첫 번째 설정은 원하는 설정입니다.

"도메인간에 데이터 원본 액세스"를 "사용"으로 설정하십시오.