อะไรคือความแตกต่างระหว่าง
contentType: "application/json; charset=utf-8",
dataType: "json",
เทียบกับ
contentType: "application/json",
dataType: "text",
อะไรคือความแตกต่างระหว่าง
contentType: "application/json; charset=utf-8",
dataType: "json",
เทียบกับ
contentType: "application/json",
dataType: "text",
คำตอบ:
contentType
คือส่วนหัว HTTP ที่ส่งไปยังเซิร์ฟเวอร์โดยระบุรูปแบบเฉพาะ dataType
คุณกำลังบอก jQuery ว่าจะตอบสนองแบบไหน $.ajax()
เอกสารมีรายละเอียดเต็มรูปแบบของเหล่านี้เช่นกัน
โดยเฉพาะในกรณีของคุณเป็นครั้งแรกที่จะขอสำหรับการตอบสนองที่จะอยู่ในUTF-8
ที่สองไม่ได้ดูแล สิ่งแรกคือการปฏิบัติต่อการตอบสนองเป็นวัตถุ JavaScript อย่างที่สองจะถือว่าเป็นสตริง
สิ่งแรกคือ:
success: function(data) {
// get data, e.g. data.title;
}
ที่สอง:
success: function(data) {
alert("Here's lots of data, just a string: " + data);
}
dataType = ""
?
(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):
==============================
คำขอตัวอย่าง:
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
ระบุรูปแบบของการตอบสนองที่คาดหวัง เกี่ยวข้องกับส่วนหัวยอมรับ JQuery จะพยายามสรุปตามประเภทเนื้อหาของการตอบสนอง==============================
คำขอตัวอย่าง:
GET /someFolder/index.html HTTP/1.1
Host: mysite.org
Accept: application/xml
<<other headers>>
==============================
คำขอข้างต้นต้องการ XML จากเซิร์ฟเวอร์
เกี่ยวกับคำถามของคุณ
contentType: "application/json; charset=utf-8",
dataType: "json",
ที่นี่คุณกำลังส่งข้อมูล json โดยใช้ชุดอักขระ UTF8 และคุณคาดหวังข้อมูล json กลับจากเซิร์ฟเวอร์ ตามเอกสาร JQuery สำหรับ dataType
ประเภท json จะแยกวิเคราะห์ไฟล์ข้อมูลที่ดึงมาเป็นอ็อบเจ็กต์ JavaScript และส่งคืนอ็อบเจ็กต์ที่สร้างขึ้นเป็นข้อมูลผลลัพธ์
ดังนั้นสิ่งที่คุณจะได้รับในตัวจัดการความสำเร็จคือวัตถุจาวาสคริปต์ที่เหมาะสม (JQuery แปลงวัตถุ json ให้คุณ)
ในขณะที่
contentType: "application/json",
dataType: "text",
ที่นี่คุณกำลังส่งข้อมูล json เนื่องจากคุณไม่ได้กล่าวถึงการเข้ารหัสตามเอกสาร JQuery
หากไม่ได้ระบุชุดอักขระข้อมูลจะถูกส่งไปยังเซิร์ฟเวอร์โดยใช้ชุดอักขระเริ่มต้นของเซิร์ฟเวอร์ คุณต้องถอดรหัสสิ่งนี้อย่างเหมาะสมทางฝั่งเซิร์ฟเวอร์
และเนื่องจาก dataType ถูกระบุเป็นข้อความสิ่งที่คุณจะได้รับในตัวจัดการความสำเร็จคือข้อความธรรมดาตามเอกสารสำหรับ dataType
ประเภทข้อความและ xml ส่งคืนข้อมูลโดยไม่มีการประมวลผล ข้อมูลจะถูกส่งต่อไปยังตัวจัดการความสำเร็จ
ตามเอกสาร :
"json"
: ประเมินการตอบสนองเป็น JSON และส่งคืนอ็อบเจ็กต์ JavaScript ใน jQuery 1.4 ข้อมูล JSON จะถูกแยกวิเคราะห์อย่างเข้มงวด JSON ที่มีรูปแบบไม่ถูกต้องจะถูกปฏิเสธและเกิดข้อผิดพลาดในการแยกวิเคราะห์ (ดู json.org สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการจัดรูปแบบ JSON ที่เหมาะสม)"text"
: สตริงข้อความธรรมดาjQuery Ajax loader ทำงานได้ไม่ดีเมื่อคุณเรียกใช้ API สองรายการพร้อมกัน ในการแก้ไขปัญหานี้คุณต้องเรียก API ทีละรายการโดยใช้isAsync
คุณสมบัติในการตั้งค่า Ajax คุณต้องตรวจสอบให้แน่ใจว่าไม่มีข้อผิดพลาดใด ๆ ในการตั้งค่า มิฉะนั้นตัวโหลดจะไม่ทำงาน เช่นชนิดเนื้อหาที่ไม่ได้กำหนดชนิดข้อมูลสำหรับการโทร POST / PUT / DELETE / GET