IE9에서 어려운 ajax 오류가 발생했습니다. 나는 이것이 기술적으로 크로스 도메인 요청이 아니라는 것을 최전선으로 말할 것이므로 문제가 아닌 것으로 확신합니다.IE9 JQuery.ajax가 미스터리 오류를 던졌습니다
편집 : 이유는 분명하지 않지만 (의견보기 참조) 동일한 도메인 요청이 교차 도메인으로 처리되는 것과 관련이있는 것으로 보입니다.
크로스 도메인 아약스 요청을 만들기 위해 로컬 프록시를 사용하고 있습니다. 사용하는 URL은 http://localhost/proxy/?target=.....
입니다. 좋은 브라우저는 모두 만족하지만 IE는 요청이 발송되기도 전에 즉시 오류를 반환합니다. 이것은 Fiddler와 IE의 개발자 도구 네트워크 캡처를 사용하여).
JQuery의 ajax.error 콜백에 전달 된 오류 객체를 검사 할 때 isRejected()
함수가 true를 반환하지만 요청 거부를 유발할 수없는 것을 알 수 없습니다. 오류 객체의 readyState가 4 (요청이 완료되었음을 의미 함)이고 status는 0이고 statusText는 "error"입니다.
나는 조금이처럼 내 요청을 짓고 있어요 :
proxy.beforeRequestSend 기능은 다음과 같습니다$.ajax(url, {
data: {...list of parameters...},
dataType: 'json',
type: 'GET',
success: function() { ... },
error: function() { ... },
beforeSend: proxy.beforeRequestSend,
timeout: 35000
});
:
this.beforeRequestSend = function(XHR, settings) {
if(that.proxyRequired(settings.url)) {
// I've also tried using the full url (http://localhost/proxy/?...)
settings.url = 'proxy/?target=' + encodeURIComponent(settings.url);
}
};
사람이 요청이 크게 실패하는 원인이 무엇인지 알고 있나요 IE9? 불행히도 나는 테스트를 위해 IE8이나 7에 접근 할 수 없지만 같은 행동을한다고 가정한다. JQuery의 ajax 오류 처리기가 호출된다는 사실은 요청을 작성하는 동안 오류가 발생하지 않았지만 요청이 실행될 때 발생한다고 제안합니다. 다른 모든 브라우저에서 제대로 작동한다는 것은 기본 사항이 정확함을 나타냅니다.
는나는 이전에 JQuery와/IE 콤보는 URL 인코딩 일부 문자를,하지만 난 beforeSend의 끝에서 settings.url
을 경고하는 경우 대상 URL이 제대로 인코딩 기능 문제가 읽었습니다 (이 또한 나에게 말한다 that.proxyRequired(settings.url)
true를 반환하는) .
모든 입력 사항을 매우 높이 평가합니다.
jquery의 최소화되지 않은 버전을 사용하여 호출합니다. – asawyer
@asawyer 나는 잠시 동안 JQuery를 보면서 잠깐 보냈다. 파이어 폭스와 IE는 내 요청이 크로스 도메인 (??)이지만 파이어 폭스가'JQuery.support.cors'에 대해 false를 반환한다고 생각할 때까지 true를 반환합니다. 이것이 갈라지는 곳입니다. 이것이 문제라면, 두 브라우저 중 어느 쪽이 요청이 도메인 간이라고 생각하는지, 심지어 전체 프록시 URL (도메인 포함)을 테스트하고 대상 URL에서 'http : //'를 제거했을 때의 이유를 모르겠다. – tomfumb