1

IE8 と IE9 で、 POST動詞とPUT動詞でjQuery.ajax() を使用して RESTful API を呼び出すと、 jqXHR で応答ヘッダーが返されないことに気付きました。ただし、GET 要求は期待どおりに機能します。

この動作は、他のすべてのブラウザーとは異なります。Chrome、FF、Opera、および Safari のすべてが、POST および PUT 要求の応答で期待されるヘッダーの完全なセットを返すことを確認しました。IE8 と IE9 だけが、床にヘッダーを投げているようです。(私がチェックしていないことの 1 つは、HEAD リクエストで何が起こるかです。)

ヘッダーが実際にネットワーク経由で作成されていることをFiddlerで確認したので、問題は jQuery 自体または IE8 と IE9 のいずれかにあります。

これは既知の問題ですか? もしそうなら、回避策はありますか。POST および PUT に続くヘッダーを保持するために、jQuery で何かをオーバーロード/上書きできますか? 私の現在の回避策は、成功コールバック内で GET を使用して変更されたデータを単純に再フェッチすることです。IE8 と IE9 はGET操作のヘッダーを台無しにしないためです。

以下は、メインの jQuery ベースの AJAX ワーカー メソッドのスニペットです。

    $.ajax({
        url: String.format(um.proxy.url, url),
        type: ajaxParams.verb,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: String.format('{0}', ajaxParams.jsonData),
        headers: mapOfHeaders,
        success: function (data, textStatus, jqXHR) {
            //...
        },
        error: function (msg, textStatus, errorThrown) {
            //...
        }
    });
4

2 に答える 2

5

これは、 IEの現在のすべてのフレーバー(7、8、および9)の既知の問題であることが判明しました。応答コードが204の場合、IEは単にすべてのヘッダーをフロアにスローします。同時実行性チェックに最新のeTagを必要とする純粋なAJAX実装を作成している私のような人々にとって、IEは純粋なAJAXアプローチを廃止し、現在のeTagをフェッチするために即時GETを実行するように強制します。:facepalm:

これが私がなんとか掘り起こしたいくつかの記事です:

HTTPにETagヘッダーがありませんInternetExplorerでコンテンツ応答がありません

http://dalelane.co.uk/blog/?p=2043

response.headers.ETagが未定義です

http://datajs.codeplex.com/discussions/398295

部分的な回避策の1つは、IEをスニッフィングし、すぐにHEADリクエストを実行してETagをフェッチすることですが、このアプローチの問題は、誰かがあなたの前に忍び込んでレコードを更新した場合、eTagを取得することです。彼女の変化のために、あなたのものではありません。したがって、これは許容できる回避策ではありません。

だから、私はIEを嗅ぎ、すぐにGETを実行します。それ以外の場合は、他のすべてのブラウザーで、jQueryのjqXHR.getResponseHeader(namespace.constants.headers.eTag)を使用してeTagを取得します。

于 2012-10-12T21:50:57.917 に答える
0

REST サービスが、要求元のアプリケーションとは別のサーバーにある場合は、この記事を確認してください。受け入れられた回答は、JSONP コンテンツ タイプを使用する必要がある理由を説明しています。

REST サービスへの jQuery ajax 呼び出し

于 2012-09-19T23:17:51.547 に答える