[JQUERY] 크로스 도메인 호출에 IE에서 실패 아약스 JQuery와 $
JQUERY크로스 도메인 호출에 IE에서 실패 아약스 JQuery와 $
해결법
-
1.IE의 문제는 보안 영역 크로스 도메인 요청을 허용하도록 정의하지에 의존하고 있는지 확인할 수 있을까요? 에 대한 설명이 마이크로 소프트 페이지를 참조하십시오.
IE의 문제는 보안 영역 크로스 도메인 요청을 허용하도록 정의하지에 의존하고 있는지 확인할 수 있을까요? 에 대한 설명이 마이크로 소프트 페이지를 참조하십시오.
OTOH,이 페이지는 IE7과 eariler 할 수없는 도메인 간 호출하지만, IE8은, XMLHttpRequest를, 하나 개 JQuery와 용도가 아닌 다른 객체를 사용 할 수 있음을 언급하고있다. XDomainRequest 작동하는지 당신은 확인 수 있을까요?
EDIT (2013년 8월 22일)
여기 웨이 백 머신에서 가져온 그 정보의 일부를 쓰고 있어요, 그래서 두 번째 링크는, 죽은 :
-
2.IE8 및 IE9 위해 당신은 XDomainRequest (XDR)를 사용합니다. 당신은 아래에 보면 당신은 $ 아약스와 유사한 형식의 일종이다 확인할 수 있습니다. 지금까지 내 연구가 저를 가지고 같이 내가 IE6 및 7에서이 도메인 간 작업을 얻을 수 없다 (아직 이것에 대한 주위에 일자리를 찾고). XDR 먼저 IE8 (그것은 또한 IE9에서의)에서 나왔다. 그러니까 기본적으로 첫째, I의 6/7에 대한 테스트 및 더 AJAX를하지 않는다.
IE8 및 IE9 위해 당신은 XDomainRequest (XDR)를 사용합니다. 당신은 아래에 보면 당신은 $ 아약스와 유사한 형식의 일종이다 확인할 수 있습니다. 지금까지 내 연구가 저를 가지고 같이 내가 IE6 및 7에서이 도메인 간 작업을 얻을 수 없다 (아직 이것에 대한 주위에 일자리를 찾고). XDR 먼저 IE8 (그것은 또한 IE9에서의)에서 나왔다. 그러니까 기본적으로 첫째, I의 6/7에 대한 테스트 및 더 AJAX를하지 않는다.
IE10 + 일반적으로 모든 같은 다른 브라우저 크로스 도메인을 할 수있다 (축하 마이크로 소프트 ... 한숨)
후 다른 그 경우 (분명히 더 나은 브라우저 스니핑 이상) 창에서 'XDomainRequest에 대한 테스트 및 방법, 다른 현명한 ELSE가 $ 아약스 정상적으로를 수행하는 JSON AJAX 요청을 수행합니다.
도움이 되었기를 바랍니다!! 나를 영원히이 모두 원래 알아 냈 취득에 소요
XDomainRequest 객체에 대한 정보
// call with your url (with parameters) // 2nd param is your callback function (which will be passed the json DATA back) crossDomainAjax('http://www.somecrossdomaincall.com/?blah=123', function (data) { // success logic }); function crossDomainAjax (url, successCallback) { // IE8 & 9 only Cross domain JSON GET request if ('XDomainRequest' in window && window.XDomainRequest !== null) { var xdr = new XDomainRequest(); // Use Microsoft XDR xdr.open('get', url); xdr.onload = function () { var dom = new ActiveXObject('Microsoft.XMLDOM'), JSON = $.parseJSON(xdr.responseText); dom.async = false; if (JSON == null || typeof (JSON) == 'undefined') { JSON = $.parseJSON(data.firstChild.textContent); } successCallback(JSON); // internal function }; xdr.onerror = function() { _result = false; }; xdr.send(); } // IE7 and lower can't do cross domain else if (navigator.userAgent.indexOf('MSIE') != -1 && parseInt(navigator.userAgent.match(/MSIE ([\d.]+)/)[1], 10) < 8) { return false; } // Do normal jQuery AJAX for everything else else { $.ajax({ url: url, cache: false, dataType: 'json', type: 'GET', async: false, // must be set to false success: function (data, success) { successCallback(data); } }); } }
-
3.JQuery와 당신을 위해이 작업을 수행, 유일한 방법은 $ .support.cors를 설정하는 것입니다 = TRUE; 그리고 크로스 도메인 요청 JQuery와 사용자를위한 모든 브라우저에서 잘 작동합니다.
JQuery와 당신을 위해이 작업을 수행, 유일한 방법은 $ .support.cors를 설정하는 것입니다 = TRUE; 그리고 크로스 도메인 요청 JQuery와 사용자를위한 모든 브라우저에서 잘 작동합니다.
-
4.IE8에 대한 jQuery를 도메인 간 AJAX : 간단하게이 jQuery를 플러그인을 설치
IE8에 대한 jQuery를 도메인 간 AJAX : 간단하게이 jQuery를 플러그인을 설치
이 1.4kb 플러그인은 인터넷 익스플로러 8, 9에서 바로 작동합니다.
jQuery를 한 후 플러그인을 포함하고, 정상적으로 귀하의 아약스 요청을 호출합니다. 아무것도 다른 필요하지 않습니다.
-
5.IE에 대한 JQuery와 여분의 전송을 추가합니다. (그냥 마지막에 스크립트에이 코드를 추가)
IE에 대한 JQuery와 여분의 전송을 추가합니다. (그냥 마지막에 스크립트에이 코드를 추가)
$.ajaxTransport("+*", function( options, originalOptions, jqXHR ) { if(jQuery.browser.msie && window.XDomainRequest) { var xdr; return { send: function( headers, completeCallback ) { // Use Microsoft XDR xdr = new XDomainRequest(); xdr.open("get", options.url); xdr.onload = function() { if(this.contentType.match(/\/xml/)){ var dom = new ActiveXObject("Microsoft.XMLDOM"); dom.async = false; dom.loadXML(this.responseText); completeCallback(200, "success", [dom]); }else{ completeCallback(200, "success", [this.responseText]); } }; xdr.ontimeout = function(){ completeCallback(408, "error", ["The request timed out."]); }; xdr.onerror = function(){ completeCallback(404, "error", ["The requested resource could not be found."]); }; xdr.send(); }, abort: function() { if(xdr)xdr.abort(); } }; } });
이 JQuery와 $ 아약스 실패 도메인 간 AJAX 요청에 대한 내 문제를 해결했다.
건배.
-
6.근처에 오는 사람들은 http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx XDomainRequest의 제한에 대한 어떤 이야기를 읽을 잘 할 수있다
근처에 오는 사람들은 http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx XDomainRequest의 제한에 대한 어떤 이야기를 읽을 잘 할 수있다
-
7.여전히 jQuery를 2.0을 사용하여이 문제를 (나는 내가) 알고있을 누군가를 위해, 제이 데이브 쓴 최고의 jQuery를 해결하지만 난 여전히 즉 자신의 코드에 추가 할 몇 가지 있습니다 :
여전히 jQuery를 2.0을 사용하여이 문제를 (나는 내가) 알고있을 누군가를 위해, 제이 데이브 쓴 최고의 jQuery를 해결하지만 난 여전히 즉 자신의 코드에 추가 할 몇 가지 있습니다 :
전체 코드는 다음과 같습니다 :
// add ajax transport method for cross domain requests when using IE9 if('XDomainRequest' in window && window.XDomainRequest !== null) { $.ajaxTransport("+*", function( options, originalOptions, jqXHR ) { // verify if we need to do a cross domain request // if not return so we don't break same domain requests if (typeof options.crossDomain === 'undefined' || !options.crossDomain) { return; } var xdr; return { send: function( headers, completeCallback ) { // Use Microsoft XDR xdr = new XDomainRequest(); xdr.open("get", options.url); // NOTE: make sure protocols are the same otherwise this will fail silently xdr.onload = function() { if(this.contentType.match(/\/xml/)){ var dom = new ActiveXObject("Microsoft.XMLDOM"); dom.async = false; dom.loadXML(this.responseText); completeCallback(200, "success", [dom]); } else { completeCallback(200, "success", [this.responseText]); } }; xdr.onprogress = function() {}; xdr.ontimeout = function(){ completeCallback(408, "error", ["The request timed out."]); }; xdr.onerror = function(){ completeCallback(404, "error", ["The requested resource could not be found."]); }; xdr.send(); }, abort: function() { if(xdr) xdr.abort(); } }; }); }
-
8.참고 추가
참고 추가
$.support.cors = true;
IE8에 대한 작업에 $ 아약스 호출을 강제로 충분했다
-
9.간단하게 "? 콜백 =?"추가 (또는 "및 콜백 =?") 당신의 URL에 :
간단하게 "? 콜백 =?"추가 (또는 "및 콜백 =?") 당신의 URL에 :
$.getJSON({ url:myUrl + "?callback=?", data: myData, success: function(data){ /*My function stuff*/ } });
(위와 같이, 크로스 도메인에 대해 제대로 모든 다른 세트) 호출을 수행 할 때이 적절한 JSONP 서식 트리거합니다.
보다 자세한 설명은 여기에 대한 대답에서 찾을 수 있습니다.
-
10.@Furqan 당신은 나를 당신이 HTTP POST 방법으로이 테스트 여부를 알려 주시기 바랍니다 수
@Furqan 당신은 나를 당신이 HTTP POST 방법으로이 테스트 여부를 알려 주시기 바랍니다 수
또한 상황의 같은 종류의 작업입니다,하지만 난 다른 도메인에 데이터를 게시 할 수 없습니다입니다 때문에.
그러나이 글을 읽는 후에는 아주 간단했다 ... 유일한 방법은 당신이 OLD 브라우저 잊어해야합니다. 나는 빠른 참조를 위해 URL 위의 같은에서 POST 방식으로 전송하는 코드를 제공하고있다
function createCORSRequest(method, url){ var xhr = new XMLHttpRequest(); if ("withCredentials" in xhr){ xhr.open(method, url, true); } else if (typeof XDomainRequest != "undefined"){ xhr = new XDomainRequest(); xhr.open(method, url); } else { xhr = null; } return xhr; } var request = createCORSRequest("POST", "http://www.sanshark.com/"); var content = "name=sandesh&lastname=daddi"; if (request){ request.onload = function(){ //do something with request.responseText alert(request.responseText); }; request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); request.setRequestHeader("Content-length", content.length); request.send(content); }
-
11.마이크로 소프트는 항상 자멸 (적어도 IE에서) 밭고랑 쟁기 :
마이크로 소프트는 항상 자멸 (적어도 IE에서) 밭고랑 쟁기 :
http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
CORS는 IE8에 XDomainRequest와 함께 작동합니다. 그러나 IE 8은 파이어 폭스 3.5, 사파리 4+, 그리고 크롬 모든 지원 등의 요청 동안 Preflighted 또는 자격을 요청을 지원하지 않습니다.
-
12.나는 대체하여 그것을 해결, IE에서 같은 문제가 있습니다 :
나는 대체하여 그것을 해결, IE에서 같은 문제가 있습니다 :
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
에
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
그래서 기본적 JQuery와 버전을 업그레이드합니다.
-
13.나는 다른 사람들이없는 동안 일부 CORS 통화가 중단 된 곳 IE9에서 비슷한 문제가 있었다. 나는이 IE9 내 service.get 해결 방법에 연기 추가, 그래서 내가 필요하지 정확히 무엇을했던 XDomainRequest 제안 위 있도록 내 애플도 약속 인터페이스에 따라 달라집니다. 잘하면이 문제에 걸쳐 실행 다른 사람에게 유용 할 수 있습니다. :
나는 다른 사람들이없는 동안 일부 CORS 통화가 중단 된 곳 IE9에서 비슷한 문제가 있었다. 나는이 IE9 내 service.get 해결 방법에 연기 추가, 그래서 내가 필요하지 정확히 무엇을했던 XDomainRequest 제안 위 있도록 내 애플도 약속 인터페이스에 따라 달라집니다. 잘하면이 문제에 걸쳐 실행 다른 사람에게 유용 할 수 있습니다. :
get: function (url) { if ('XDomainRequest' in window && window.XDomainRequest !== null) { var deferred = $.Deferred(); var xdr = new XDomainRequest(); xdr.open("get", url); xdr.onload = function() { json = xdr.responseText; parsed_json = $.parseJSON(json); deferred.resolve(parsed_json); } xdr.send(); return deferred; } else { return $.ajax({ url: url, type: 'GET', dataType: 'json', crossDomain: true }); } }
-
14.이 때문에 문제의 포맷의 부족으로 말하기 어렵다,하지만 난 아약스 호출 두 가지 문제를 볼 생각합니다.
이 때문에 문제의 포맷의 부족으로 말하기 어렵다,하지만 난 아약스 호출 두 가지 문제를 볼 생각합니다.
1) 프로그램 따옴표 / ContentType을 위해 x-www-form-urlencoded를되어야
2)의 contentType 및 비동기 매개 변수를 구분하는 쉼표가 있어야합니다.
from https://stackoverflow.com/questions/3362474/jquery-ajax-fails-in-ie-on-cross-domain-calls by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 미래 요소 jQuery를 CSTE 연구진 함수가 사용되지 .live 같이 중복] (0) | 2020.10.10 |
---|---|
[JQUERY] JQuery와 Ajax를 사용하여 MySQL의에서 데이터를 검색하는 (0) | 2020.10.10 |
[JQUERY] ) ($ 아약스에 AJAX 요청 배열을 합격 [중복] (0) | 2020.10.10 |
[JQUERY] 구문 분석 JSON은 HTML 테이블에 대한 객체 (0) | 2020.10.10 |
[JQUERY] 이 주변에 어떤 방법 - jQuery를 이벤트 핸들러는 항상이 결합 된 순서대로 실행? [복제] (0) | 2020.10.10 |