10

複数のドメインからリクエストを処理する単一のドメインにAJAX呼び出しを行おうとしています。FirefoxとChromeでクロスドメインを有効にするには、処理サーバーにヘッダーを設定するだけで簡単にできます。

header("Access-Control-Allow-Origin: *");

ただし、これはInternetExplorerで有効にするのに役立ちません。私が試してみると:

httpreq.send('');

アクセスが拒否されたというエラーで停止します。

これをInternetExplorerで有効にするにはどうすればよいですか?

4

6 に答える 6

12

IE7以降でCORSのソリューションを最初に投稿してから、多くの変更がありました。まず、jQueryプロパティ$ .support.corsはデフォルトでtrueであり、.NET Frameworks 4.0以降では、バージョン3.5.1以前で実装されているCORSはサポートされなくなりました。ASP.NET 4.0でWebサービスを作成するときに、NuGetパッケージとして利用できるThinktecture.IdentityModelをインストールしました。次に、Global.asaxファイルのApplication_Startメソッドに、次を追加します。

void Application_Start(object sender, EventArgs e) 
{ 
    Thinktecture.IdentityModel.Http.Cors.IIS.UrlBasedCorsConfiguration.Configuration
        .ForResources("*")
        .ForOrigins("http://localhost:80, http://mydomain")
        .AllowAll()
        .AllowMethods("GET", "POST");
}

次に、system.webServer内にhttpProtocol要素を追加します。

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type, Accept, X-Requested-With, X-File-Name" />
    <add name="Access-Control-Allow-Methods" value="GET, POST" />
  </customHeaders>
</httpProtocol>

私の$.ajax呼び出しは次のようになります:

$.ajax({
    url: serviceUrl, 
    data: JSON.stringify(postData),
    type: "POST",
    cache: false,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: onSuccess,
    error: onError
});
于 2012-06-13T15:46:08.307 に答える
9

アクセスデータソースのクロスドメインを有効にしてみましたか ここに画像の説明を入力してください

于 2015-09-11T08:08:48.273 に答える
5

InternetExplorerで直接それを実行できるとは思いません。いくつかのオプションがあります。

  • 制御するサーバーに、Ajaxリクエストを転送できるプロキシ転送スクリプトを設定します。匿名リレーに変えられないように、必要な適切な宛先にのみ転送されるようにしてください。

  • document.domainトリックを使用します。基本的にiframe、Ajax呼び出しを行う必要のあるサーバーごとに1つずつ、一連​​のを作成する必要があります。各iframeセット内で、Ajaxリクエストdocument.domainに送信する必要があるドメインと完全に一致するようにプロパティを設定します。必要なデータの入力方法については、設定する前にDOM操作を使用してください。このトリックでは、ターゲットサーバーが元のサーバーのサブドメインにある必要があることに注意してください。この記事の詳細と例を示します。document.domain

于 2010-01-11T20:43:39.590 に答える
3

IE8と9をjQuery$.ajax(jQueryバージョン1.7.2)だけで動作させました

jQuery.support.cors = true;
jQuery(function() {
$.ajax({
    crossDomain : true,
    dataType: 'html',
    //...
    });
});
于 2012-06-04T18:51:18.063 に答える
1

Internet Explorer 8の場合、FF3の場合と同様に行う必要があります。つまり、「Access-Control-Allow-Origin」ヘッダーを使用し、XMLHttpRequestの代わりにXDomainRequestオブジェクトを使用します。IE8については、すべて詳細に説明されています: http ://msdn.microsoft.com/en-us/library/dd573303%28VS.85%29.aspx

古いフレーバーのIEは、Cross SiteAccessControlまたはXDomainRequestオブジェクトをサポートしていません。ただし、それで終わりではありません。たとえば、IFrameのトリックに頼ることができます。つまり、次のように関数を呼び出す非表示のIFrameを作成します。http: //softwareas.com/cross-domain-communication-with-iframes

于 2010-04-05T12:08:07.070 に答える
0

エリックの答えに追加するだけで、古いバージョンのIEの場合は、Jquery1.4.2の$.ajaxメソッドを使用できます。これは、デフォルトでクロスドメインリクエストを許可します。クロスドメインJSONの場合は、

jQuery.getJSON(String url、Map data、Function callback)はXMLHttpRequestを返します

Jqueryドキュメントからの抜粋。

「jQueryはJSONPをネイティブにサポートするようになりました。リモートURLから($。getJSONまたは$ .ajaxを介して)JSONを読み込もうとすると、サーバーが解釈するための追加のコールバックが提供されます。」

于 2010-08-02T08:20:10.330 に答える