ประเภทเนื้อหาและประเภทข้อมูลในคำขอ AJAX คืออะไร?


179

ประเภทเนื้อหาและประเภทข้อมูลในคำขอ POST คืออะไร? สมมติว่าฉันมีสิ่งนี้:

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

    },
    error : function(error) {

    },

คือcontentTypeสิ่งที่เราส่ง? ดังนั้นสิ่งที่เราส่งในตัวอย่างข้างต้นคือ JSON และสิ่งที่เราได้รับคือข้อความธรรมดา? ฉันไม่เข้าใจจริงๆ

คำตอบ:


304

contentTypeคือประเภทของข้อมูลที่คุณส่งดังนั้นจึงapplication/json; charset=utf-8เป็นข้อมูลทั่วไปตามapplication/x-www-form-urlencoded; charset=UTF-8ที่เป็นค่าเริ่มต้น

dataTypeคือสิ่งที่คุณคาดหวังกลับมาจากเซิร์ฟเวอร์: json, html, textฯลฯ 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
    },
});

อีกหนึ่ง - ถ้าคุณต้องการโพสต์:

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

ขอบคุณแน่นอน :) "ความสำเร็จ" นี้คืออะไร: จริง มันเป็นไฟล์ json อื่นในแบ็กเอนด์? ความสำเร็จนี้เกิดขึ้นได้อย่างไร? นั่นคือสิ่งที่ฉันอยากรู้
user2759697

2
นั่นเป็นเพียงวัตถุธรรมดา - มันถูกสร้างขึ้นมา แต่เซิร์ฟเวอร์ตัดสินใจที่จะทำให้มัน เว็บเซิร์ฟเวอร์สามารถส่งทุกสิ่งที่รู้สึกเหมือน - HTML, ข้อความหรือในกรณีนี้วัตถุ JSON ที่มีคุณสมบัติเดียวที่มีชื่อ "สำเร็จ" และคุณค่าของความจริง ฉันไม่สามารถเดาได้ว่า API ของเฟรมเวิร์กของคุณคืออะไร แต่ใน C # บน ASP.NET MVC มันจะเป็นอะไรที่ง่ายเหมือน[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 ในคำว่า Type จึงสำคัญ ตรวจสอบjQuery API
Vadim Levkovsky

1
@Jacques ฉันคิดว่าพวกเขาสามารถทำได้requestContentTypeและresponseDataTypeแต่ในความเป็นจริงเมื่อคุณทำมันสองสามครั้งและคุณเข้าใจ API คุณจะไม่สับสนพอที่จะทำให้การพิมพ์พิเศษคุ้มค่า
Joe Enos

1
@stom คำถามและคำตอบของฉันเฉพาะกับ POST แต่ถ้าฉันจำได้ว่าถ้าคุณส่งวัตถุธรรมดาธรรมดาเป็นข้อมูลใน GET มันจะเปลี่ยนมันให้เป็นสตริงแบบสอบถามที่มีคู่ของคีย์ - ค่า ไม่แน่ใจว่าจะเกิดอะไรขึ้นถ้าคุณมีวัตถุที่ซับซ้อนที่มีค่าซ้อนกัน - แต่ก็ไม่ควรที่จะลองสิ่งนั้นหากคุณสงสัย ฉันจะไม่ทำอย่างนั้นในชีวิตจริง - ฉันใช้ AJAX กับ GET น้อยมากอยู่ดี
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 นั่นเป็นเพียงส่วนหนึ่งของประเภท MIME ที่กำหนดไว้สำหรับ JSON ดูคำถามนี้ - stackoverflow.com/questions/477816/…
Richard Dalton

4
นั่นคือสิ่งที่ฉันชอบเกี่ยวกับ SO ... ขอตัวแทนเพื่อแจ้งให้ชัดเจน ... > _ <
Christoph

1

ดูhttp://api.jquery.com/jQuery.ajax/มีการกล่าวถึงประเภทข้อมูลและ contentType ที่นั่น

พวกเขาทั้งสองใช้ในการร้องขอไปยังเซิร์ฟเวอร์เพื่อให้เซิร์ฟเวอร์รู้ชนิดของข้อมูลที่จะรับ / ส่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.