Câu trả lời:
contentType
là tiêu đề HTTP được gửi đến máy chủ, chỉ định một định dạng cụ thể. dataType
bạn đang nói với jQuery loại phản ứng mong đợi. Các $.ajax()
tài liệu có mô tả đầy đủ về những điều này là tốt.
Trong trường hợp cụ thể của bạn, là người đầu tiên là yêu cầu cho các phản ứng được trong UTF-8
, thứ hai không quan tâm. Ngoài ra, thứ nhất là coi phản hồi là một đối tượng JavaScript, thứ hai sẽ coi nó như một chuỗi.
Vì vậy, đầu tiên sẽ là:
success: function(data) {
// get data, e.g. data.title;
}
Thư hai:
success: function(data) {
alert("Here's lots of data, just a string: " + data);
}
dataType = ""
?
(ps: câu trả lời được đưa ra bởi Nick Craver là không chính xác)
contentType chỉ định định dạng của dữ liệu được gửi đến máy chủ như một phần của yêu cầu (nó cũng có thể được gửi như một phần của phản hồi, nhiều hơn về điều đó sau).
dataType chỉ định định dạng dữ liệu dự kiến sẽ được nhận bởi máy khách (trình duyệt).
Cả hai đều không thể thay thế cho nhau.
contentType
là tiêu đề được gửi đến máy chủ, chỉ định định dạng của dữ liệu (tức là nội dung của nội dung thư) đang được gửi đến máy chủ. Điều này được sử dụng với các yêu cầu POST và PUT. Thông thường khi bạn gửi yêu cầu POST, phần thân thông báo bao gồm các tham số được truyền như:==============================
Yêu cầu mẫu:
POST /search HTTP/1.1
Content-Type: application/x-www-form-urlencoded
<<other header>>
name=sam&age=35
==============================
Dòng cuối cùng phía trên "name = sam & age = 35" là phần thân thông báo và contentType chỉ định nó là application / x-www-form-urlencoding do chúng ta truyền các tham số biểu mẫu trong phần thân thông báo. Tuy nhiên, chúng tôi không giới hạn chỉ gửi các tham số, chúng tôi có thể gửi json, xml, ... như thế này (gửi các loại dữ liệu khác nhau đặc biệt hữu ích với các dịch vụ web RESTful):
==============================
Yêu cầu mẫu:
POST /orders HTTP/1.1
Content-Type: application/xml
<<other header>>
<order>
<total>$199.02</total>
<date>December 22, 2008 06:56</date>
...
</order>
==============================
Vì vậy, ContentType lần này là: application / xml, vì đó là những gì chúng tôi đang gửi. Các ví dụ trên cho thấy yêu cầu mẫu, tương tự như phản hồi gửi từ máy chủ cũng có thể có tiêu đề Kiểu nội dung chỉ định những gì máy chủ đang gửi như thế này:
==============================
mẫu phản ứng:
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
chỉ định định dạng của phản ứng mong đợi. Nó liên quan đến tiêu đề Chấp nhận. JQuery sẽ cố gắng suy luận nó dựa trên Kiểu nội dung của phản hồi.==============================
Yêu cầu mẫu:
GET /someFolder/index.html HTTP/1.1
Host: mysite.org
Accept: application/xml
<<other headers>>
==============================
Yêu cầu trên là mong đợi XML từ máy chủ.
Liên quan đến câu hỏi của bạn,
contentType: "application/json; charset=utf-8",
dataType: "json",
Tại đây bạn đang gửi dữ liệu json bằng bộ ký tự UTF8 và bạn mong đợi dữ liệu json từ máy chủ. Theo tài liệu JQuery cho dataType,
Kiểu json phân tích tệp dữ liệu được tìm nạp dưới dạng đối tượng JavaScript và trả về đối tượng được xây dựng làm dữ liệu kết quả.
Vì vậy, những gì bạn nhận được trong trình xử lý thành công là đối tượng javascript thích hợp (JQuery chuyển đổi đối tượng json cho bạn)
trong khi
contentType: "application/json",
dataType: "text",
Ở đây bạn đang gửi dữ liệu json, vì bạn đã không đề cập đến mã hóa, theo các tài liệu JQuery,
Nếu không có bộ ký tự được chỉ định, dữ liệu sẽ được truyền đến máy chủ bằng bộ ký tự mặc định của máy chủ; bạn phải giải mã điều này một cách thích hợp ở phía máy chủ.
và vì dataType được chỉ định là văn bản, những gì bạn nhận được trong trình xử lý thành công là văn bản thuần túy, theo các tài liệu cho dataType,
Các loại văn bản và xml trả về dữ liệu mà không cần xử lý. Dữ liệu đơn giản được chuyển cho người xử lý thành công
theo tài liệu :
"json"
: Đánh giá phản hồi dưới dạng JSON và trả về một đối tượng JavaScript. Trong jQuery 1.4, dữ liệu JSON được phân tích cú pháp một cách nghiêm ngặt; bất kỳ JSON không đúng định dạng nào đều bị từ chối và lỗi phân tích cú pháp được đưa ra. (Xem json.org để biết thêm thông tin về định dạng JSON thích hợp.)"text"
: Một chuỗi văn bản đơn giản.Trình tải jQuery Ajax không hoạt động tốt khi bạn gọi hai API cùng một lúc. Để giải quyết vấn đề này, bạn phải gọi từng API một bằng cách sử dụng thuộc isAsync
tính trong cài đặt Ajax. Bạn cũng cần đảm bảo rằng không nên có bất kỳ lỗi nào trong cài đặt. Nếu không, trình tải sẽ không hoạt động. Ví dụ: loại nội dung không xác định, loại dữ liệu cho cuộc gọi POST / PUT / DELETE / GET.