Różnice między contentType i dataType w funkcji jQuery ajax

123

Mam następującą funkcję zwrotną Jquery i mam co do niej niewielkie wątpliwości (nie znam za dobrze 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); 
        }
    });

Jak widać, ta funkcja po prostu wykonuje żądanie AJAX do zaplecza, ustawiając parametr dla tego żądania.

Ustawiłem, że wysyłam żądanie pod adres URL, że żądanie jest żądaniem POST, a dane, które wysyłam, to następujący ciąg:

„barapple”

Mam pewne trudności ze zrozumieniem różnic między contentType i dataType

Myślę, że contentType określa typ danych, które są akceptowane w odpowiedzi HTTP, czy to prawda?

A typ danych? Co powiedzieć? Typ danych, które wysyłam w żądaniu HTTP?

W tym przypadku jest to „tekst”, ponieważ wysyłam ciąg tekstowy, który przedstawia kod XML?

AndreaNobili
źródło
Czy cel typu zawartości i typu danych różni się między użyciem jQuery a użyciem interfejsu API REST?
sofs 1

Odpowiedzi:

172

Z dokumentacji :

contentType (domyślnie: 'application / x-www-form-urlencoded; charset = UTF-8')

Typ: ciąg

Wysyłając dane na serwer, używaj tego typu zawartości. Domyślnie jest to „application / x-www-form-urlencoded; charset = UTF-8”, co jest wystarczające w większości przypadków. Jeśli jawnie przekażesz typ zawartości do $ .ajax (), to zawsze będzie on wysyłany na serwer (nawet jeśli nie zostaną przesłane żadne dane). Jeśli nie określono zestawu znaków, dane będą przesyłane na serwer przy użyciu domyślnego zestawu znaków serwera; musisz to odpowiednio zdekodować po stronie serwera.

i:

dataType (domyślnie: Intelligent Guess (xml, json, script lub html))

Typ: ciąg

Typ danych, których oczekujesz z powrotem z serwera. Jeśli żadna nie jest określona, ​​jQuery spróbuje wywnioskować to na podstawie typu MIME odpowiedzi (typ XML MIME da XML, w 1.4 JSON da obiekt JavaScript, w 1.4 skrypt wykona skrypt, a wszystko inne będzie zwracane jako ciąg).

Zasadniczo są przeciwieństwem tego, czym myślałeś, że są.

Anthony Grist
źródło
3
contentTypeWpływa również na nagłówki, dataTypenie
Viney
83

wprowadź opis obrazu tutaj

Po angielsku:

  • ContentType: Wysyłając dane na serwer, użyj tego typu zawartości. Domyślnie application/x-www-form-urlencoded; charset=UTF-8, co jest w porządku w większości przypadków.
  • Accepts: Typ treści wysyłany w nagłówku żądania, który informuje serwer, jaki rodzaj odpowiedzi przyjmie w zamian. Zależy od DataType.
  • DataType: Typ danych, których oczekujesz z powrotem z serwera. Jeśli nic nie zostanie określone, jQuery spróbuje to wywnioskować na podstawie typu MIME odpowiedzi. Może być text, xml, html, script, json, jsonp.
Maria Ines Parnisari
źródło
9
Ładna wizualizacja. Dzięki.
Dr. MAF