Apa tipe konten dan tipe data dalam permintaan AJAX?

179

Apa tipe konten dan tipe data dalam permintaan POST? Misalkan saya punya ini:

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

    },
    error : function(error) {

    },

Apa contentTypeyang kami kirim? Jadi apa yang kami kirim dalam contoh di atas adalah JSON dan apa yang kami terima adalah teks biasa? Saya tidak begitu mengerti.

pengguna2759697
sumber

Jawaban:

304

contentTypeadalah tipe data yang Anda kirim, demikian application/json; charset=utf-8juga yang umum application/x-www-form-urlencoded; charset=UTF-8, yang merupakan default.

dataTypeadalah apa yang Anda harapkan kembali dari server: json, html, text, dll jQuery akan menggunakan ini untuk mengetahui bagaimana untuk mengisi parameter fungsi keberhasilan ini.

Jika Anda memposting sesuatu seperti:

{"name":"John Doe"}

dan mengharapkan kembali:

{"success":true}

Maka Anda harus memiliki:

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
    },
});

Jika Anda mengharapkan yang berikut:

<div>SUCCESS!!!</div>

Maka yang harus Anda lakukan:

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
    },
});

Satu lagi - jika Anda ingin memposting:

name=John&age=34

Maka jangan stringifydata, dan lakukan:

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
    },
});
Joe Enos
sumber
terima kasih memang :) apa ini "sukses": benar. apakah ini file json lain di backend? bagaimana kesuksesan ini dibuat? itulah yang saya benar-benar ingin tahu
user2759697
2
Itu hanya objek biasa - itu dibuat namun server memutuskan untuk membuatnya. Server web dapat mengirim apa pun rasanya - HTML, teks, atau dalam hal ini, objek JSON dengan satu properti dengan nama "sukses" dan nilai true. Saya tidak bisa menebak apa kerangka API Anda, tetapi dalam C # pada ASP.NET MVC itu akan menjadi sesuatu yang sederhana[HttpPost]public JsonResult user(Person postedPerson) { /* Save postedPerson to DB */ return Json(new { success = true }); }
Joe Enos
1
Perhatikan bahwa Anda harus menggunakan $.ajax({ dataType : "html", ... bukan $.ajax({ datatype : "html",... Jadi huruf T dalam kata Jenis itu penting. Periksa jQuery API
Vadim Levkovsky
1
@ Jacques Saya kira mereka bisa melakukannya requestContentTypedan responseDataType, tetapi dalam kenyataannya, setelah Anda melakukannya beberapa kali, dan Anda memahami API, Anda tidak akan cukup bingung untuk membuat pengetikan ekstra bermanfaat.
Joe Enos
1
@stom Pertanyaan dan jawaban saya khusus untuk POST, tetapi jika saya ingat, jika Anda melewatkan objek sederhana seperti data pada GET, itu akan mengubahnya menjadi string kueri dengan pasangan nilai kunci. Tidak yakin apa yang akan terjadi jika Anda memiliki objek kompleks dengan nilai bersarang - tetapi seharusnya tidak sulit untuk mencobanya jika Anda penasaran. Saya tidak akan pernah melakukan itu dalam kehidupan nyata - sangat jarang saya pernah menggunakan AJAX pada GET.
Joe Enos
32

Dari dokumentasi jQuery - http://api.jquery.com/jQuery.ajax/

contentType Saat mengirim data ke server, gunakan tipe konten ini.

dataType Jenis data yang Anda harapkan kembali dari server. Jika tidak ada yang ditentukan, jQuery akan mencoba menyimpulkannya berdasarkan tipe respons MIME

"text": String teks biasa.

Jadi Anda ingin menjadi application/jsoncontentType dan dataType menjadi text:

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

    },
    error : function(error) {

    }
});
Richard Dalton
sumber
terima kasih memang dan apa aplikasi ini di aplikasi / json. apakah itu jalan?
user2759697
1
@ user2759697 Itu hanya bagian dari tipe MIME yang ditentukan untuk JSON. Lihat pertanyaan ini - stackoverflow.com/questions/477816/…
Richard Dalton
4
Itulah yang saya sukai dari SO ... dapatkan perwakilan karena menyatakan yang jelas ...> _ <
Christoph
1

Lihat http://api.jquery.com/jQuery.ajax/ , ada menyebutkan tipe data dan tipe konten di sana.

Keduanya digunakan dalam permintaan ke server sehingga server tahu jenis data apa yang akan diterima / dikirim.

Jono
sumber