Unterschiede zwischen contentType und dataType in der jQuery-Ajax-Funktion

123

Ich habe die folgende Jquery-Rückruffunktion und ich habe einen kleinen Zweifel daran (ich kenne Jquery nicht sehr gut):

$("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); 
        }
    });

Wie Sie sehen können, führen Sie diese Funktion einfach eine AJAX-Anforderung an das Backend aus, indem Sie den Parameter für diese Anforderung festlegen.

Ich habe festgelegt, dass ich die Anfrage an eine URL sende, dass es sich bei der Anfrage um eine POST-Anfrage handelt und dass die von mir gesendeten Daten die folgende Zeichenfolge sind:

"barapple"

Ich habe einige Schwierigkeiten zu verstehen, was die Unterschiede zwischen contentType und dataType sind

Ich denke, dass contentType den Datentyp angibt, der in der HTTP-Antwort akzeptiert wird. Ist das richtig?

Und Datentyp? Was sagen? Welche Art von Daten sende ich in der HTTP-Anfrage?

In diesem Fall ist "Text", weil ich eine Textzeichenfolge sende, die XML-Code darstellt?

AndreaNobili
quelle
Unterscheidet sich der Zweck von Inhaltstyp und Datentyp zwischen der Verwendung von jQuery und der Verwendung von REST-API?
sofs1

Antworten:

172

Aus der Dokumentation :

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

Typ: Zeichenfolge

Verwenden Sie diesen Inhaltstyp, wenn Sie Daten an den Server senden. Die Standardeinstellung ist "application / x-www-form-urlencoded; charset = UTF-8", was in den meisten Fällen in Ordnung ist. Wenn Sie einen Inhaltstyp explizit an $ .ajax () übergeben, wird er immer an den Server gesendet (auch wenn keine Daten gesendet werden). Wenn kein Zeichensatz angegeben ist, werden Daten mit dem Standardzeichensatz des Servers an den Server übertragen. Sie müssen dies auf der Serverseite entsprechend dekodieren.

und:

Datentyp (Standard: Intelligent Guess (XML, JSON, Skript oder HTML))

Typ: Zeichenfolge

Der Datentyp, den Sie vom Server erwarten. Wenn keine angegeben ist, versucht jQuery, sie basierend auf dem MIME-Typ der Antwort abzuleiten (ein XML-MIME-Typ liefert XML, in 1.4 JSON liefert ein JavaScript-Objekt, in 1.4 führt das Skript das Skript aus und alles andere wird ausgeführt als Zeichenfolge zurückgegeben).

Sie sind im Wesentlichen das Gegenteil von dem, was Sie dachten.

Anthony Grist
quelle
3
Auch contentTypewirkt sich auf die Überschriften, dataTypenicht
Viney
83

Geben Sie hier die Bildbeschreibung ein

Auf Englisch:

  • ContentType: Verwenden Sie diesen Inhaltstyp, wenn Sie Daten an den Server senden. Die Standardeinstellung ist application/x-www-form-urlencoded; charset=UTF-8, was in den meisten Fällen in Ordnung ist.
  • Accepts: Der im Anforderungsheader gesendete Inhaltstyp, der dem Server mitteilt, welche Art von Antwort er als Gegenleistung akzeptiert. Kommt drauf an DataType.
  • DataType: Der Datentyp, den Sie vom Server erwarten. Wenn keine angegeben ist, versucht jQuery, sie basierend auf dem MIME-Typ der Antwort abzuleiten. Kann sein text, xml, html, script, json, jsonp.
Maria Ines Parnisari
quelle
9
Schöne Visualisierung. Vielen Dank.
Dr. MAF