3

次の jQuery.ajax リクエストを実行しようとしていますが、奇妙な問題に直面しています。

IE9 を使用してこのリクエストを送信すると、送信したにもかかわらず contentType パラメータが欠落しています。クロムではリクエストは問題ありません。

$.ajax({
        type: "POST",
        contentType: "application/x-www-form-urlencoded",        
        url: this.AgentServiceUrl + "/" + methodName,
        data: data,
        async: true,
        success: function (xml, textStatus) { if (successHandler != null) successHandler(xml, textStatus); },
        error: function (xmlHttpRequest, textStatus, errorThrown) { if (errorHandler != null) errorHandler(state, xmlHttpRequest, textStatus, errorThrown); }
    });

jQuery 2.0.2 と jQuery.XDomainRequest.js を使用してクロス ドメイン リクエストを処理しています。

私に何ができる??

4

1 に答える 1

3

$.ajax は XDomainRequest を使用して、AJAX アプリケーションが安全なクロスオリジン リクエストを作成できるようにします。

Internet Explorer 8 では、XDomainRequest オブジェクトが導入されました。このオブジェクトを使用すると、AJAX アプリケーションは、応答が公開されていることをデータ ソースが示している場合に、現在のページでのみ HTTP 応答を読み取ることができるようにすることで、安全なクロス オリジン リクエストを直接行うことができます。

残念ながら、リクエストの Content-Type ヘッダーでは text/plain のみがサポートされています

XDomainRequest オブジェクトの元の化身では、POST 要求の Content-Type を指定できました。HTML フォームは、text/plain、application/x-www-urlencoded、および multipart/form- の 3 つの異なるコンテンツ タイプでのデータ送信に制限されているため、これは、HTML フォームが発行できるリクエストのみを発行するという私たちの目標に違反していることが指摘されました。データ。特に、一部の AJAX サーバー ライブラリは、SOAP または JSON コンテンツ タイプを含むリクエストを受信した場合、クライアントが信頼されているか、同じオリジンである必要があると盲目的に想定していることが指摘されました (以前は HTML 自体が発行する方法を提供していなかったため)。その Content-Type を持つクロスオリジン リクエスト)。

残念ながら、後の IE8 ベータ版でこの問題を修正したときは、少し行き過ぎでした。コンテンツ タイプを text/plain に制限しましたが、データが application/x-www-urlencoded 形式であることを呼び出し元が指定できないようにしました。サーバー側のフレームワーク (ASP、ASPNET など) は、x-www-urlencoded コンテンツ タイプが指定されている場合にのみ、リクエストのフィールドを名前と値のペアに自動的に解析するため、これは問題です。

この問題を回避するには、現在 HTML フォームを処理しているサーバー コードを書き直して、XDomainRequest オブジェクトからリクエストを受信するときに、リクエスト ボディを名前と値のペアに手動で解析する必要があります。これにより、XDomainRequest オブジェクトのサポートを追加することが、そうでない場合よりも難しくなります。

ソース

于 2013-07-04T10:58:40.203 に答える