Differenze tra contentType e dataType nella funzione jQuery ajax


123

Ho la seguente funzione di callback Jquery e ho qualche dubbio al riguardo (non conosco molto bene 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); 
        }
    });

Come puoi vedere questa funzione esegue semplicemente una richiesta AJAX al backend impostando il parametro per questa richiesta.

Ho impostato che sto inviando la richiesta verso un URL, che la richiesta è una richiesta POST e che i dati che sto inviando sono la seguente stringa:

"Barapple"

Ho qualche difficoltà a capire quali sono le differenze tra contentType e dataType

Penso che contentType specifichi il tipo di dati che sono accettabili ricevuti nella risposta HTTP, è giusto?

E dataType? Cosa dire? Il tipo di dati che sto inviando nella richiesta HTTP?

In questo caso è "testo" perché invio una stringa di testo che rappresenta il codice XML?


Lo scopo del tipo di contenuto e del tipo di dati è diverso tra l'utilizzo di jQuery e l'utilizzo dell'API REST?
sofs1

Risposte:


172

Dalla documentazione :

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

Tipo: String

Quando si inviano dati al server, utilizzare questo tipo di contenuto. L'impostazione predefinita è "application / x-www-form-urlencoded; charset = UTF-8", che va bene per la maggior parte dei casi. Se si passa esplicitamente un tipo di contenuto a $ .ajax (), verrà sempre inviato al server (anche se non vengono inviati dati). Se non viene specificato alcun set di caratteri, i dati verranno trasmessi al server utilizzando il set di caratteri predefinito del server; è necessario decodificarlo in modo appropriato sul lato server.

e:

dataType (predefinito: Intelligent Guess (xml, json, script o html))

Tipo: String

Il tipo di dati che ti aspetti di ricevere dal server. Se non viene specificato nessuno, jQuery proverà a dedurlo in base al tipo MIME della risposta (un tipo MIME XML produrrà XML, in 1.4 JSON produrrà un oggetto JavaScript, in 1.4 lo script eseguirà lo script e qualsiasi altra cosa sarà restituito come stringa).

Sono essenzialmente l'opposto di quello che pensavi fossero.


3
contentTypeColpisce anche le intestazioni, dataTypeno
Viney

83

inserisci qui la descrizione dell'immagine

In inglese:

  • ContentType: Quando si inviano dati al server, utilizzare questo tipo di contenuto. L'impostazione predefinita è application/x-www-form-urlencoded; charset=UTF-8, che va bene per la maggior parte dei casi.
  • Accepts: Il tipo di contenuto inviato nell'intestazione della richiesta che indica al server quale tipo di risposta accetterà in cambio. Dipende da DataType.
  • DataType: Il tipo di dati che ti aspetti di ricevere dal server. Se non viene specificato nessuno, jQuery proverà a dedurlo in base al tipo MIME della risposta. Può essere text, xml, html, script, json, jsonp.

9
Bella visualizzazione. Grazie.
Dr. MAF
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.