web-dev-qa-db-ja.com

jQuery ajaxがattribを受け入れる点は何ですか?実際に何かしますか?

なぜこれを地球上で整理しようとする一時間を費やしました(coffeescript)

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

した絶対に何もない Acceptsヘッダーを変更するが、これは

$.ajax
  dataType: "json"

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

完全に混乱しています。何か不足しているのでしょうか、それとも一年中エイプリルフールのジョークを受け入れますか。

28
virtualeyes

いつものように documentation はあなたの友達です:

受け入れます

デフォルト:DataTypeに依存

リクエストヘッダーで送信されるコンテンツタイプで、サーバーが代わりに受け入れる応答の種類を指示します。 accepts設定を変更する必要がある場合は、$。ajaxSetup()メソッドで一度変更することをお勧めします。

dataType

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

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

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

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

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

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

"jsonp":JSONPを使用してJSONブロックにロードします。 URLの最後に?callback=?を追加して、コールバックを指定します。クエリ文字列パラメータを追加してキャッシュを無効にします。
_=[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'
    }
});
26
Darin Dimitrov