javascript - Diferențele dintre contentType și dataType în funcția ajax jQuery


Am următoarea funcție callback Jquery și am o mică îndoială în legătură cu ea (nu cunosc foarte bine 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); 
        }
    });

După cum puteți vedea, această funcție execută pur și simplu o cerere AJAX către backend setând parametrul pentru această cerere.

Am setat că trimit cererea către un URL, că cererea este o cerere POST și că datele pe care le trimit sunt următorul șir:

barapple

Am unele dificultăți să înțeleg care sunt diferențele dintre contentType și dataType

Cred că contentType specifică tipul de date care sunt acceptabile să fie primite în răspunsul HTTP, este corect?

Și dataType? Ce zici? Tipul de date pe care îl trimit în cererea HTTP?

În acest caz este „text” pentru că trimit un șir textual care reprezintă cod XML?

Răspuns #1

Din documentație:

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

Tip: Șir

Când trimiți date către server, folosește acest tip de conținut. Implicit este „application/x-www-form-urlencoded; charset=UTF-8”, ceea ce este potrivit în majoritatea cazurilor. Dacă treci explicit un tip de conținut la $.ajax(), atunci acesta va fi întotdeauna trimis către server (chiar dacă nu se trimit date). Dacă nu este specificat un set de caractere, datele vor fi transmise serverului folosind setul de caractere implicit al serverului; trebuie să decodezi acest lucru corespunzător pe partea serverului.

și :

dataType (implicit: Presupunere Inteligentă (xml, json, script sau html))

Tip: Șir

Tipul de date pe care te aștepți să-l primești înapoi de la server. Dacă nu este specificat niciunul, jQuery va încerca să-l deducă pe baza tipului MIME al răspunsului (un tip MIME XML va returna XML, în versiunea 1.4 JSON va returna un obiect JavaScript, în versiunea 1.4 script va executa scriptul, iar orice altceva va fi returnat ca șir de caractere).

Ei sunt practic opusul a ceea ce credeai că sunt.

Răspunsul #2

În engleză:

  • ContentType: Când trimiteți date către server, utilizați acest tip de conținut. Implicit este application/x-www-form-urlencoded; charset=UTF-8, ceea ce este potrivit pentru majoritatea cazurilor.
  • Acceptă: Tipul de conținut trimis în antetul cererii care spune serverului ce tip de răspuns va accepta în schimb. Depinde de DataType.
  • DataType: Tipul de date pe care te aștepți să le primești înapoi de la server. Dacă nu este specificat niciunul, jQuery va încerca să îl deducă pe baza tipului MIME al răspunsului. Poate fi text, xml, html, script, json, jsonp.