ความแตกต่างระหว่าง contentType และ dataType ในฟังก์ชัน jQuery ajax


123

ฉันมีฟังก์ชั่นเรียกกลับ Jquery ต่อไปนี้และฉันมีข้อสงสัยเล็กน้อยเกี่ยวกับเรื่องนี้ (ฉันไม่รู้จัก Jquery ดีนัก):

$("form.readXmlForm").submit(function() {
    // Riferimento all'elemento form che ha scatenato il submit 
    var form = $(this);
    // Variabile che contiene il riferimento al bottone clickato 
    var button = form.children(":first");

    $.ajax({        // Viene eseguita la chiamata AJAX 
        type: "POST", // Tipo di richiesta: POST 
        // URL verso quale viene inviata la richiesta
        url: form.attr("action"),    
        // Dati XML inviati: 
        data: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><javaBean><foo>bar</foo><fruit>apple</fruit></javaBean>", 
        // Tipo di media type accettabile dalla response: 
        contentType: "application/xml", 
        dataType: "text", 

        success: function(text) { 
            MvcUtil.showSuccessResponse(text, button); 
        }, 

        error: function(xhr) { 
            MvcUtil.showErrorResponse(xhr.responseText, button); 
        }
    });

ดังที่คุณเห็นฟังก์ชันนี้เพียงแค่เรียกใช้ AJAX Request ไปยังแบ็กเอนด์ที่ตั้งค่าพารามิเตอร์สำหรับคำขอนี้

ฉันได้ตั้งค่าว่าฉันกำลังส่งคำขอไปยัง URL คำขอนั้นเป็นคำขอ POST และข้อมูลที่ฉันกำลังส่งเป็นสตริงต่อไปนี้:

"barapple"

ฉันมีปัญหาในการทำความเข้าใจว่าอะไรคือความแตกต่างระหว่างcontentTypeและdataType

ฉันคิดว่าcontentTypeระบุประเภทของข้อมูลที่ยอมรับได้ในการตอบกลับ HTTP ใช่ไหม

และ dataType? พูดอะไร? ประเภทของข้อมูลที่ฉันกำลังส่งในคำขอ HTTP?

ในกรณีนี้คือ "ข้อความ" เนื่องจากฉันกำลังส่งสตริงข้อความที่แสดงรหัส XML?


วัตถุประสงค์ประเภทเนื้อหาและชนิดข้อมูลแตกต่างกันระหว่างการใช้งาน jQuery และการใช้งาน REST API หรือไม่
sofs1

คำตอบ:


172

จากเอกสารประกอบ :

contentType (ค่าเริ่มต้น: 'application / x-www-form-urlencoded; charset = UTF-8')

ประเภท: สตริง

เมื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ให้ใช้ประเภทเนื้อหานี้ ค่าเริ่มต้นคือ "application / x-www-form-urlencoded; charset = UTF-8" ซึ่งใช้ได้ดีสำหรับกรณีส่วนใหญ่ หากคุณส่งผ่านประเภทเนื้อหาไปที่ $ .ajax () อย่างชัดเจนระบบจะส่งไปยังเซิร์ฟเวอร์เสมอ (แม้ว่าจะไม่มีการส่งข้อมูลก็ตาม) หากไม่ได้ระบุชุดอักขระข้อมูลจะถูกส่งไปยังเซิร์ฟเวอร์โดยใช้ชุดอักขระเริ่มต้นของเซิร์ฟเวอร์ คุณต้องถอดรหัสสิ่งนี้อย่างเหมาะสมทางฝั่งเซิร์ฟเวอร์

และ:

dataType (ค่าเริ่มต้น: Intelligent Guess (xml, json, script หรือ html))

ประเภท: สตริง

ประเภทข้อมูลที่คุณต้องการกลับมาจากเซิร์ฟเวอร์ หากไม่มีการระบุ jQuery จะพยายามอนุมานตามประเภท MIME ของการตอบสนอง (ประเภท MIME XML จะให้ผล XML ใน 1.4 JSON จะให้วัตถุ JavaScript ในสคริปต์ 1.4 จะเรียกใช้สคริปต์และสิ่งอื่น ๆ จะเป็น ส่งคืนเป็นสตริง)

โดยพื้นฐานแล้วมันตรงกันข้ามกับที่คุณคิดไว้


3
นอกจากนี้ยังcontentTypeส่งผลกระทบต่อส่วนหัวdataTypeไม่
Viney

83

ใส่คำอธิบายภาพที่นี่

เป็นภาษาอังกฤษ:

  • ContentType: เมื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ให้ใช้เนื้อหาประเภทนี้ ค่าเริ่มต้นคือapplication/x-www-form-urlencoded; charset=UTF-8ซึ่งใช้ได้สำหรับกรณีส่วนใหญ่
  • Accepts: ประเภทเนื้อหาที่ส่งในส่วนหัวของคำขอที่บอกเซิร์ฟเวอร์ว่าจะตอบกลับแบบใด ขึ้นอยู่กับDataType.
  • DataType: ประเภทข้อมูลที่คุณต้องการกลับมาจากเซิร์ฟเวอร์ หากไม่มีการระบุ jQuery จะพยายามอนุมานตามประเภท MIME ของการตอบสนอง สามารถtext, xml, html, script, json, jsonp.

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