1. ホーム
  2. jquery

[解決済み] IE9 jQuery AJAXでCORSを使うと "Access is denied "が返ってくる。

2022-08-26 09:12:28

質問

以下は、すべてのブラウザで動作する IEを除く (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'
            }
        );

別の関数で dataType: 'jsonp' しかし、私はこのAJAXコールで返されるいかなるデータも必要としません。私の最後の手段は、それを動作させるために、JSONPでラップされた不明瞭なものを返すことです。

なぜ IE がデータを返さない CORS リクエストで失敗するのか、何か思い当たることはありますか?

どのように解決するのですか?

これは、既知の バグ のバグです。jQuery チームは、コアでこれをサポートする予定はなく、プラグインとしてより適しています。 このコメント ). IEでは ではなく を使用します。 XMLHttpRequest という名前の代替オブジェクトがありますが XDomainRequest .

そこで をサポートするプラグインがあり、これは はここで見つけることができます。 : https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js

EDIT この機能は $.ajaxTransport はトランスポーター・ファクトリを登録します。トランスポーターは 内部で $.ajax を使用してリクエストを実行します。したがって、私 とする を呼び出すことができるはずです。 $.ajax を通常通り呼び出せるはずです。トランスポーターとエクステンドに関する情報 $.ajax はこちら .

また、このプラグインのより良いバージョンは、次のようになります。 ここで .

他に2つの注意点があります。

  1. オブジェクト XDomainRequest は IE8 から導入されました。 であり、それ以下のバージョンでは動作しません。
  2. IE10 からは CORS は でサポートされるようになり、通常の XMLHttpRequest .

編集 2: http から 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