インターネット上にあるサーバー(http)の間でajax呼び出しをしようとしています。そして、それを自分のローカルホストに向けます。 FF/Chrome/ETC ...動作します。 IE issue。IM USING IE 11 AND 10。
要求は行われません。 「拒否されたアクセス」は即座にスローされます。
これがコードです。あなたが見るためだけに。
IE8およびIE9の古典的なHTTP/HTTPSエラーではありません。これは別のものですが、ドキュメントは役に立ちません。
$jq.ajax({
contentType: 'application/json',
url: url,
dataType: 'json',
crossDomain: true,
beforeSend: function (xhr) {
xhr.withCredentials = true;
xhr.setRequestHeader("Authorization", "Basic " + $jq.base64.encode(username and password));
},
success: function (data, status, headers) {},
error: function (xhr, status, error) {}
ステータスは0
xhr
オブジェクトにあり、エラーは「アクセス拒否」です
Internet Explorerは、セキュリティゾーン機能の一部としてこのエラーを発生させます。デフォルトのセキュリティ設定を使用すると、「インターネット」ゾーンのオリジンから「ローカルイントラネット」ゾーンのリソースにアクセスしようとすると、「アクセスが拒否されました」エラーが発生します。
Ajaxコードを手動で記述している場合、リソースを開こうとするとInternet Explorerでエラーが発生します。例えば:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost/', true); // This line will trigger an error
xhr.send();
Originサイトを「信頼済みサイト」セキュリティゾーンに追加することにより、このエラーを回避できます。これをテストするには、「http://client.cors-api.appspot.com」を「信頼済みサイト」ゾーンに追加し、このテストページをローカルサイトで test-cors.org で使用します。リモートURLとして。
信頼できるサイトの要件に加えて、私はリクエストに同じオリジンと同じプロトコルを使用、例えば私のテストサイトはhttpsでホストされていましたが、httpを使用した宛先で失敗しました(sなし)。
これはIEにのみ適用されます。Chromeはデバッグコンソールに警告を丁寧に記録するだけで失敗しません。
IE9でクロスオリジンAjaxリクエストを作成しようとしている場合、XDomainRequest
の代わりにXMLHttpRequest
を使用する必要があります。 XDRをラップするjQueryプラグインがあります。 XDRにはいくつかの顕著な制限があることに注意してください。
別のオプションは、次のようなライブラリを使用することです: https://github.com/jpillora/xdomain 。
jQueryは、IE9でサポートされていないXMLHttpRequest
オブジェクトを使用してajax呼び出しを実装します。代わりにXDomainRequest
を使用するように強制する必要があります。
このjQueryプラグインを使用してこの問題を回避します。
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest