IE9 jQuery AJAX with CORS에서 "Access is denied"를 반환합니다.
다음은 IE를 제외한 모든 브라우저에서 작동합니다(I'm testing in IE 9).
jQuery.support.cors = true;
...
$.ajax(
url + "messages/postMessageReadByPersonEmail",
{
crossDomain: true,
data: {
messageId : messageId,
personEmail : personEmail
},
success: function() {
alert('marked as read');
},
error: function(a,b,c) {
alert('failed');
},
type: 'post'
}
);
는 저는다음사또용다있기습다니능이른는하을▁which▁▁uses다있습니를 사용하는 다른 기능이 있습니다.dataType: 'jsonp'
하지만 이 AJAX 통화에 대한 어떠한 데이터도 필요하지 않습니다.저의 마지막 수단은 JSONP로 싼 지브리쉬를 돌려주는 것입니다.
IE가 데이터를 반환하지 않는 CORS 요청을 망치는 이유가 무엇입니까?
이것은 jQuery에서 알려진 버그입니다.jQuery 팀은 "핵심적으로 이를 지원할 계획이 없으며 플러그인으로 더 적합합니다."(이 의견 참조)IE는 XMLHttpRequest를 사용하지 않고 XDomainRequest라는 대체 개체를 사용합니다.
jQuery에서는 이를 지원하는 플러그인을 사용할 수 있으며, 이 플러그인은 https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js 에서 찾을 수 있습니다.
편집 기능$.ajaxTransport
트랜스포터 공장을 등록합니다.트랜스포터는 내부적으로 사용됩니다.$.ajax
요청을 수행합니다.그러므로, 저는 당신이 전화를 할 수 있어야 한다고 생각합니다.$.ajax
평소처럼.운송수단 및 연장에 대한 정보$.ajax
여기서 찾을 수 있습니다.
또한 이 플러그인의 더 나은 버전은 여기에서 찾을 수 있습니다.
다른 두 가지 참고 사항:
- XDomainRequest 개체는 IE8에서 도입되었으며 아래 버전에서는 작동하지 않습니다.
- IE10부터는 일반 XMLHttpRequest를 사용하여 CORS가 지원됩니다.
편집 2: http to https 문제
요청은 호스팅 페이지와 동일한 구성표를 대상으로 해야 합니다.
이 제한은 AJAX 페이지가 http://example.com 에 있는 경우 대상 URL도 HTTP로 시작해야 함을 의미합니다.마찬가지로 AJAX 페이지가 https://example.com 에 있는 경우 대상 URL도 HTTPS로 시작해야 합니다.
출처: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
@dennisg의 수락된 답변을 바탕으로 jQuery를 사용하여 성공적으로 완료했습니다.MoonScript의 XDomainRequest.js.
다음 코드는 Chrome, Firefox 및 IE10에서는 올바르게 작동했지만 IE9에서는 실패했습니다.스크립트를 간단히 포함시켰더니 이제 IE9에서 자동으로 작동합니다. (그리고 아마도 8개일 것입니다. 하지만 테스트해 본 적은 없습니다.)
var displayTweets = function () {
$.ajax({
cache: false,
type: 'GET',
crossDomain: true,
url: Site.config().apiRoot + '/Api/GetTwitterFeed',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data) {
for (var tweet in data) {
displayTweet(data[tweet]);
}
}
});
};
"jQuery-ajaxTransport-XDomainRequest" 플러그인을 사용하는 방법에 대한 전체 지침은 https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest#instructions 에서 확인할 수 있습니다.
이 플러그인은 적극적으로 지원되며 HTML, JSON 및 XML을 처리합니다. 파일은 CDNJS에서도 호스팅되므로 추가 설정 없이 페이지에 스크립트를 직접 드롭할 수 있습니다. http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.1/jquery.xdomainrequest.min.js
CORS를 입니다. 와 IE9 버전의 CORS. 는 GET/POST만 지원합니다.text/plain
여기에 설명된 내용 유형: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
따라서 모든 HTTP 동사 및/또는 json 등을 사용하려면 다른 솔루션을 사용해야 합니다.IE9 이하를 사용하면 프록시로 우아하게 다운그레이드되는 프록시를 작성했습니다.ASP를 사용하고 있다면 코드를 변경할 필요가 전혀 없습니다.그물.
해결책은 두 부분으로 나뉩니다.첫 번째는 jQuery ajax 처리에 연결하는 jquery 스크립트입니다.crossDomain 요청이 있고 브라우저가 IE인 경우 웹 서버를 자동으로 호출합니다.
$.ajaxPrefilter(function (options, originalOptions, jqXhr) {
if (!window.CorsProxyUrl) {
window.CorsProxyUrl = '/corsproxy/';
}
// only proxy those requests
// that are marked as crossDomain requests.
if (!options.crossDomain) {
return;
}
if (getIeVersion() && getIeVersion() < 10) {
var url = options.url;
options.beforeSend = function (request) {
request.setRequestHeader("X-CorsProxy-Url", url);
};
options.url = window.CorsProxyUrl;
options.crossDomain = false;
}
});
웹 서버에서 요청을 수신하고 X-CorsProxy-Url http 헤더에서 값을 가져와 HTTP 요청을 수행한 후 최종적으로 결과를 반환해야 합니다.
내 블로그 게시물: http://blog.gauffin.org/2014/04/how-to-use-cors-requests-in-internet-explorer-9-and-below/
JSONP가 지원되는 모든 브라우저(IE7+ 및 일반 브라우저)를 위한 유일한 솔루션이었기 때문에 모든 요청을 했습니다.명심하세요, 당신의 대답은 기술적으로 IE9에서 작동하므로 당신은 정답을 가지고 있습니다.
MoonScript의 솔루션을 기반으로 다음과 같은 방법을 사용할 수 있습니다.
https://github.com/intuit/xhr-xdr-adapter/blob/master/src/xhr-xdr-adapter.js
이점은 낮은 수준의 솔루션이기 때문에 jQuery뿐만 아니라 다른 프레임워크를 사용하여 IE 8/9에서 (가능한 범위 내에서) CORS를 사용할 수 있다는 것입니다.저는 AngularJS와 jQuery 1.x, 2.x에서 성공적으로 사용했습니다.
Internet Explorer 8 이상 버전에서 jQuery를 사용하여 교차 도메인 JSON 가져오기
매우 유용한 링크:
X 도메인 요청에서 json을 반환하는 문제를 해결할 수 있습니다.
이것이 누군가에게 도움이 되기를 바랍니다.
이 문제를 해결하려면 다음과 같은 Ajax 파일에 포함된 .js가 있는지도 확인하십시오.ajax.php에 shadowbox.js를 포함하는 동안 액세스 거부 오류가 발생했습니다.
개발 기계에서 CORS 웹 서비스를 테스트하던 중 IE에서만 "Access is denied" 오류 메시지가 표시되었습니다.파이어폭스와 크롬은 잘 작동했습니다.이것은 제가 아약스 호출에서 localhost를 사용했기 때문에 발생한 것으로 밝혀졌습니다!그래서 제 브라우저 URL은 다음과 같습니다.
http://my_computer.my_domain.local/CORS_Service/test.html
그리고 test.dll의 내부에 있는 나의 에이잭스 전화는 다음과 같았습니다.
//fails in IE
$.ajax({
url: "http://localhost/CORS_Service/api/Controller",
...
});
아약스 호출을 localhost 대신 컴퓨터 IP를 사용하도록 변경하면 모든 것이 작동했습니다.
//Works in IE
$.ajax({
url: "http://192.168.0.1/CORS_Service/api/Controller",
...
});
IE dev tools 창 "Network" 탭에는 CORS Preflight OPTIONS 요청 다음에 XMLHttpRequest GET이 표시되는데, 이는 바로 제가 기대했던 것입니다.
2015년 초 기준 업데이트.xDomain은 제한된 추가 코딩으로 IE9에서 CORS를 지원하기 위해 널리 사용되는 라이브러리입니다.
https://github.com/jpillora/xdomain
IE8/9에서 CORS 요청에 jquery-transport-xdr jQuery 플러그인을 사용해 보십시오.
참고 -- 참고
Ajax의 URL에는 "http://www.domain.xxx " 또는 "http://localhost/" 또는 "IP >> 127.0.0.1"을 사용하지 마십시오.주소 없이 경로(디렉토리)와 페이지 이름만 사용합니다.
거짓 상태:
var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST', 'http://www.example.com/dir/getSecurityCode.php', true);
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);
참 상태:
var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST', 'dir/getSecurityCode.php', true); // <<--- note
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);
언급URL : https://stackoverflow.com/questions/10232017/ie9-jquery-ajax-with-cors-returns-access-is-denied
'programing' 카테고리의 다른 글
어떻게 하면 텍스트가 한 줄 이상 차지하는 것을 막을 수 있습니까? (0) | 2023.08.17 |
---|---|
PHP 세션 ID 문자열의 길이는 얼마입니까? (0) | 2023.08.17 |
멀티스레드에서 스프링 트랜잭션을 사용하는 방법 (0) | 2023.08.12 |
가변 함수 인수 기본값에 대한 유용한 사용? (0) | 2023.08.12 |
MariaDB: 항목당 월평균 선택(Pivot 테이블) (0) | 2023.08.12 |