Sự khác biệt giữa contentType và dataType trong hàm ajax của jQuery


123

Tôi có hàm gọi lại Jquery sau và tôi hơi nghi ngờ về nó (tôi không biết rõ về 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); 
        }
    });

Như bạn có thể thấy, hàm này chỉ cần thực hiện một Yêu cầu AJAX tới phần phụ trợ thiết lập tham số cho yêu cầu này.

Tôi đã đặt rằng tôi đang gửi yêu cầu tới một URL, yêu cầu đó là yêu cầu ĐĂNG và dữ liệu tôi đang gửi là chuỗi sau:

"barapple"

Tôi gặp một số khó khăn để hiểu sự khác biệt giữa contentTypedataType là gì

Tôi nghĩ rằng contentType chỉ định loại dữ liệu được chấp nhận được nhận trong HTTP Response, có đúng không?

Và dataType? Nói gì? Loại dữ liệu mà tôi đang gửi trong Yêu cầu HTTP?

Trong trường hợp này là "văn bản" vì tôi đang gửi một chuỗi văn bản trình bày mã XML?


Mục đích của kiểu nội dung và kiểu dữ liệu có khác nhau giữa việc sử dụng jQuery và sử dụng API REST không?
sofs1

Câu trả lời:


172

Từ tài liệu :

contentType (mặc định: 'application / x-www-form-urlencoded; charset = UTF-8')

Loại: Chuỗi

Khi gửi dữ liệu đến máy chủ, hãy sử dụng kiểu nội dung này. Mặc định là "application / x-www-form-urlencoded; charset = UTF-8", phù hợp với hầu hết các trường hợp. Nếu bạn chuyển một cách rõ ràng kiểu nội dung đến $ .ajax (), thì nó sẽ luôn được gửi đến máy chủ (ngay cả khi không có dữ liệu nào được gửi). Nếu không có bộ ký tự nào được chỉ định, dữ liệu sẽ được truyền đến máy chủ bằng cách sử dụng bộ mã 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à:

dataType (mặc định: Intelligent Guess (xml, json, script hoặc html))

Loại: Chuỗi

Loại dữ liệu bạn đang mong đợi từ máy chủ. Nếu không có gì được chỉ định, jQuery sẽ cố gắng suy luận nó dựa trên kiểu MIME của phản hồi (kiểu MIME XML sẽ mang lại XML, trong 1.4 JSON sẽ mang lại một đối tượng JavaScript, trong 1.4 script sẽ thực thi script và bất kỳ thứ gì khác sẽ trả về dưới dạng một chuỗi).

Về cơ bản, chúng trái ngược với những gì bạn nghĩ.


3
Cũng contentTypeảnh hưởng đến các tiêu đề, dataTypekhông
Viney

83

nhập mô tả hình ảnh ở đây

Bằng tiếng Anh:

  • ContentType: Khi gửi dữ liệu đến máy chủ, hãy sử dụng kiểu nội dung này. Mặc định là application/x-www-form-urlencoded; charset=UTF-8, điều này tốt cho hầu hết các trường hợp.
  • Accepts: Loại nội dung được gửi trong tiêu đề yêu cầu cho máy chủ biết loại phản hồi mà nó sẽ chấp nhận để đổi lại. Tùy thuộc vào DataType.
  • DataType: Loại dữ liệu bạn đang mong đợi từ máy chủ. Nếu không có gì được chỉ định, jQuery sẽ cố gắng suy ra nó dựa trên kiểu MIME của phản hồi. Có thể được text, xml, html, script, json, jsonp.

9
Hình dung đẹp. Cảm ơn.
Tiến sĩ MAF
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.