30

なぜ一体これなのかを整理するために、しっかりとした時間を費やしました(coffeescript)

$.ajax
  accepts: "application/json; charset=utf-8"

受け入れヘッダーを変更するためにまったく何もしませんでしたが、これは

$.ajax
  dataType: "json"

受け入れヘッダーを適切に設定しますapplication/json; charset=utf-8

完全に混乱しています。私は何かを見逃していますか、それとも受け入れは一年中エイプリルフールの冗談ですか?

4

1 に答える 1

30

いつものように、ドキュメンテーションはあなたの友達です:

受け入れる

デフォルト: DataType に依存

要求ヘッダーで送信されるコンテンツ タイプで、サーバーが受け取る応答の種類をサーバーに通知します。受け入れ設定を変更する必要がある場合は、$.ajaxSetup() メソッドで一度変更することをお勧めします。

データ・タイプ

デフォルト: Intelligent Guess (xml、json、script、または html)

サーバーから返されることを期待しているデータのタイプ。何も指定されていない場合、jQuery は応答の MIME タイプに基づいてそれを推測しようとします (XML MIME タイプは XML を生成し、1.4 では JSON は JavaScript オブジェクトを生成し、1.4 ではスクリプトがスクリプトを実行します。文字列として返されます)。利用可能な型 (および成功のコールバックに最初の引数として渡される結果) は次のとおりです。

" xml ": jQuery で処理できる XML ドキュメントを返します。

" html ": HTML をプレーン テキストとして返します。含まれている script タグは、DOM に挿入されたときに評価されます。

" script ": 応答を JavaScript として評価し、プレーン テキストとして返します。_=[TIMESTAMP]キャッシュ オプションが true に設定されていない限り、クエリ文字列パラメータ を URL に追加してキャッシュを無効にします。注: これにより、POST がリモート ドメイン リクエストの GET に変わります。

" json ": レスポンスを JSON として評価し、JavaScript オブジェクトを返します。jQuery 1.4 では、JSON データは厳密な方法で解析されます。不正な形式の JSON は拒否され、解析エラーがスローされます。(適切な JSON 形式の詳細については、json.org を参照してください。)

" jsonp ": JSONP を使用して JSON ブロックに読み込みます。?callback=?URL の末尾にエクストラを追加 して、コールバックを指定します。
_=[TIMESTAMP]キャッシュ オプションが true に設定されていない限り、クエリ文字列パラメータ を URL に追加してキャッシュを無効にします。

" text ": プレーン テキスト文字列。スペースで区切られた複数の値: jQuery 1.5 以降、jQuery は dataType を Content-Type ヘッダーで受け取ったものから必要なものに変換できます。たとえば、テキスト応答を XML として処理する場合は、dataType に " text xml " を使用します。また、JSONP リクエストを作成し、それをテキストとして受け取り、jQuery によって XML として解釈することもできます: 「jsonp text xml」。同様に、「jsonp xml」などの短縮文字列は、最初に jsonp から xml への変換を試み、失敗すると jsonp からテキストに変換し、次にテキストから xml に変換します。

今あなたの問題に戻ります。私はcofeescriptに精通していませんが、dataTypeどちらが文字列であるかに反して、acceptsパラメーターはマップであり、次のように使用する必要があります:

$.ajax({
    url: ...
    dataType: 'json',
    accepts: {
        xml: 'text/xml',
        text: 'text/plain'
    }
});
于 2012-06-16T16:45:27.163 に答える