AJAXリクエストのコンテンツタイプとデータタイプとは何ですか?


178

POSTリクエストのコンテンツタイプとデータタイプとは何ですか?私がこれを持っていると仮定します:

$.ajax({
    type : "POST",
    url : /v1/user,
    datatype : "application/json",
    contentType: "text/plain",
    success : function() {

    },
    error : function(error) {

    },

であるcontentType私たちが送る何?上記の例で送信するのはJSONであり、受信するのはプレーンテキストですか?よくわかりません。

回答:


303

contentTypeは、送信するデータのタイプapplication/json; charset=utf-8なので、一般的なものapplication/x-www-form-urlencoded; charset=UTF-8であり、デフォルトであるです。

dataTypeあなたは、サーバーからバックを期待しているものである:jsonhtmltext、などのjQueryは成功関数のパラメータを移入する方法を見つけ出すためにこれを使用します。

次のようなものを投稿している場合:

{"name":"John Doe"}

と期待して:

{"success":true}

それからあなたは持っているべきです:

var data = {"name":"John Doe"}
$.ajax({
    dataType : "json",
    contentType: "application/json; charset=utf-8",
    data : JSON.stringify(data),
    success : function(result) {
        alert(result.success); // result is an object which is created from the returned JSON
    },
});

以下を期待している場合:

<div>SUCCESS!!!</div>

それからあなたはすべきです:

var data = {"name":"John Doe"}
$.ajax({
    dataType : "html",
    contentType: "application/json; charset=utf-8",
    data : JSON.stringify(data),
    success : function(result) {
        jQuery("#someContainer").html(result); // result is the HTML text
    },
});

もう1つ-投稿する場合:

name=John&age=34

次にstringify、データを使用しないでください。

var data = {"name":"John", "age": 34}
$.ajax({
    dataType : "html",
    contentType: "application/x-www-form-urlencoded; charset=UTF-8", // this is the default value, so it's optional
    data : data,
    success : function(result) {
        jQuery("#someContainer").html(result); // result is the HTML text
    },
});

本当にありがとう:)この「成功」とは何ですか:true。バックエンドの別のjsonファイルですか?この成功はどのように行われますか?それが私が本当に知りたいことです
user2759697

2
それは普通のオブジェクトです-それは作られますが、サーバーはそれを作ることにしました。Webサーバーは、HTML、テキスト、またはこの場合は、名前が「成功」で値がtrueの単一のプロパティを持つJSONオブジェクトである任意の感じのものを送信できます。私はあなたのAPIのフレームワークが何であるかを推測することはできませんが、ASP.NET MVCのC#では、それは次のように単純なものになります[HttpPost]public JsonResult user(Person postedPerson) { /* Save postedPerson to DB */ return Json(new { success = true }); }
Joe Enos

1
$.ajax({ dataType : "html", ... 代わりに 使用する必要があることに注意してください $.ajax({ datatype : "html",... 。したがって、単語Tの大文字のTは重要です。jQuery APIを
Vadim Levkovsky、

1
@Jacquesは、私は、彼らが行っている可能性と仮定requestContentTypeしてresponseDataType、しかし、あなたはそれを数回をやった、とあなたがAPIを理解すれば、現実には、あなたは余分なタイピングを価値あるものにするには十分混同されることはありません。
Joe Enos

1
@stom質問と私の回答はPOSTに固有のものでしたが、覚えていると思いますが、GETのデータとして通常の単純なオブジェクトを渡すと、それはキーと値のペアを持つクエリ文字列に変わります。ネストされた値を持つ複雑なオブジェクトがあるとどうなるかわかりませんが、興味があれば、それを試すのは難しくありません。とはいえ、実際にそれを行うことは決してありません-とにかく、GETでAJAXを使用することはほとんどありません。
Joe Enos

32

jQueryドキュメントから-http ://api.jquery.com/jQuery.ajax/

contentTypeサーバーにデータを送信する場合は、このコンテンツタイプを使用します。

dataTypeサーバーから返されると予想されるデータのタイプ。何も指定されていない場合、jQueryは応答のMIMEタイプに基づいてそれを推測しようとします

"text":プレーンテキストの文字列。

したがって、contentTypeをapplication/json、dataTypeを次のようにする必要がありますtext

$.ajax({
    type : "POST",
    url : /v1/user,
    dataType : "text",
    contentType: "application/json",
    data : dataAttribute,
    success : function() {

    },
    error : function(error) {

    }
});

本当にありがとう。application/ jsonでこのアプリケーションは何ですか。それは道ですか?
user2759697

1
@ user2759697これは、JSONに定義されたMIMEタイプの一部にすぎません。この質問を参照してください-stackoverflow.com/questions/477816/…–
Richard Dalton

4
それが私がSOについて好きなことです...明白なことを表明するために担当者に連絡してください>> <<
Christoph

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.