$ .ajax-dataType


135

違いは何ですか

contentType: "application/json; charset=utf-8",
dataType: "json",

contentType: "application/json",
dataType: "text",

回答:


181
  • contentType特定の形式を指定してサーバーに送信されるHTTP ヘッダーです。
    例:JSONまたはXMLを送信しています
  • dataTypejQueryにどのような応答を期待するかを伝えています。
    JSON、XML、またはHTMLなどが必要ですデフォルトでは、jQueryがそれを試して理解します。

$.ajax()ドキュメントは、これらの完全な説明があります。


あなたの特定のケースでは、最初は応答がにあることを要求しUTF-8、2番目は気にしません。また、1つ目は応答をJavaScriptオブジェクトとして扱うことで、2つ目は応答を文字列として扱うことです。

したがって、最初は次のようになります。

success: function(data) {
  // get data, e.g. data.title;
}

二番目:

success: function(data) {
  alert("Here's lots of data, just a string: " + data);
}

1
どちらがより好ましい方法であり、最も推奨されます。
Nick Kahn

1
@Adu-直接的な答えはありません。結果に対して何をしたいかによって異なります... 2つの異なることを行っています。理想的には、それが非常に単純な結果でない限り、おそらく最初のJSONの方が簡単なJSONを処理したいと思うでしょう。
Nick Craver

2
Musaは正解です。contentTypeは、サーバーに送信する形式(つまり、投稿の本文)を示します。要求された形式ではありません。
2013

@antinomeこれらの2つは通常、非常に結合されています。ここでは、スタックオーバーフローの多くの場所の例で重要です。厳密に言えば、それらは独立しています。それを反映するように更新しました。
Nick Craver

デフォルトの場所を見つけることができる場所はまだありません。つまり、手動で行って、各呼び出しの後にオブジェクトを再構築することを意味しますが、リセットでは問題が発生します。それをデフォルトとして「json」に設定すると、インテリジェントな推測を補完することはできませんが、私が指定していない呼び出し(つまり、JSON呼び出し自体ではない)に到達するまで、ある程度は機能します。空の文字列またはnullに設定すると、すべてが壊れるようです。fのために 'Intellgent Guess'で 'default'やf 'などに設定できますか?テクニカルデフォルトとはdataType = ""何ですか。つまり、2つの引用符の間に定義されていますか。
blamb

51

(ps:Nick Craverの答えは正しくありません)

contentTypeは、要求の一部としてサーバーに送信されるデータの形式を指定します(応答の一部として送信することもできます。詳細は後で説明します)。

dataTypeは、クライアント(ブラウザ)が受信する予定のデータ形式を指定します。

両方を交換することはできません。

  • contentTypeサーバーに送信されるヘッダーであり、サーバーに送信されるデータの形式(つまり、メッセージ本文のコンテンツ)を指定します。これは、POSTおよびPUT要求で使用されます。通常、POSTリクエストを送信すると、メッセージ本文は次のような渡されたパラメータで構成されます。

==============================

サンプルリクエスト:

POST /search HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 
<<other header>>

name=sam&age=35

==============================

「name = sam&age = 35」の上の最後の行はメッセージ本文であり、メッセージ本文でフォームパラメータを渡すため、contentTypeはそれをapplication / x-www-form-urlencodedとして指定します。ただし、パラメーターを送信するだけでなく、json、xmlなどを送信することもできます(さまざまなタイプのデータを送信すると、RESTful Webサービスで特に役立ちます)。

==============================

サンプルリクエスト:

POST /orders HTTP/1.1
Content-Type: application/xml
<<other header>>

<order>
   <total>$199.02</total>
   <date>December 22, 2008 06:56</date>
...
</order>

==============================

したがって、今回のContentTypeはapplication / xmlです。これが送信するものです。上記の例は、サンプルリクエストを示しています。同様に、サーバーから送信される応答には、サーバーが次のものを送信しているものを指定するContent-Typeヘッダーを含めることもできます。

==============================

サンプル応答:

HTTP/1.1 201 Created
Content-Type: application/xml
<<other headers>>

<order id="233">
   <link rel="self" href="http://example.com/orders/133"/>
   <total>$199.02</total>
   <date>December 22, 2008 06:56</date>
...
</order>

==============================

  • dataType予期する応答の形式を指定します。Acceptヘッダーに関連しています。jQueryは、応答のContent-Typeに基づいてそれを推測しようとします。

==============================

サンプルリクエスト:

GET /someFolder/index.html HTTP/1.1
Host: mysite.org
Accept: application/xml
<<other headers>>

==============================

上記のリクエストはサーバーからのXMLを期待しています。

あなたの質問について、

contentType: "application/json; charset=utf-8",
dataType: "json",

ここでは、UTF8文字セットを使用してjsonデータを送信しており、サーバーからjsonデータが返されることを期待しています。dataTypeのJQueryドキュメントに従って、

jsonタイプは、フェッチされたデータファイルをJavaScriptオブジェクトとして解析し、作成されたオブジェクトを結果データとして返します。

したがって、成功ハンドラで取得するのは適切なjavascriptオブジェクトです(JQueryがjsonオブジェクトを変換します)

一方

contentType: "application/json",
dataType: "text",

ここでは、jQueryドキュメントに従って、エンコーディングについて言及していないため、jsonデータを送信しています。

文字セットが指定されていない場合、データはサーバーのデフォルトの文字セットを使用してサーバーに送信されます。これをサーバー側で適切にデコードする必要があります。

dataTypeがテキストとして指定されているため、dataTypeのドキュメントに従って、成功ハンドラーで取得できるのはプレーンテキストです。

textおよびxmlタイプは、処理なしでデータを返します。データは単に成功ハンドラに渡されます


7

ドキュメントに従って:

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

2

2つのAPIを同時に呼び出すと、jQuery Ajaxローダーがうまく機能しません。この問題を解決するにisAsyncは、Ajax設定のプロパティを使用してAPIを1つずつ呼び出す必要があります。また、設定にエラーがないことを確認する必要があります。そうしないと、ローダーは機能しません。たとえば、POST / PUT / DELETE / GET呼び出しの未定義のコンテンツタイプ、データタイプ。


あなたがより良い説明を提供するなら、これは良い答えです...この投稿にもっと情報を入れてください。
ワワワ2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.