Was ist Inhaltstyp und Datentyp in einer AJAX-Anforderung?

178

Was ist Inhaltstyp und Datentyp in einer POST-Anforderung? Angenommen, ich habe Folgendes:

$.ajax({
    type : "POST",
    url : /v1/user,
    datatype : "application/json",
    contentType: "text/plain",
    success : function() {

    },
    error : function(error) {

    },

Ist , contentTypewas wir senden? Was wir im obigen Beispiel senden, ist JSON und was wir erhalten, ist einfacher Text? Ich verstehe nicht wirklich.

user2759697
quelle

Antworten:

302

contentTypeist die Art der Daten, die Sie senden. Dies application/json; charset=utf-8ist eine übliche Art, wie sie ist application/x-www-form-urlencoded; charset=UTF-8. Dies ist die Standardeinstellung.

dataTypeist das, was von dem Server Sie erwarten zurück: json, html, textwird etc. jQuery diese verwenden , um herauszufinden , wie sich die Erfolgsfunktion des Parameters zu füllen.

Wenn Sie etwas veröffentlichen wie:

{"name":"John Doe"}

und zurück erwarten:

{"success":true}

Dann sollten Sie haben:

var data = {"name":"John Doe"}
$.ajax({
    dataType : "json",
    contentType: "application/json; charset=utf-8",
    data : JSON.stringify(data),
    success : function(result) {
        alert(result.success); // result is an object which is created from the returned JSON
    },
});

Wenn Sie Folgendes erwarten:

<div>SUCCESS!!!</div>

Dann sollten Sie tun:

var data = {"name":"John Doe"}
$.ajax({
    dataType : "html",
    contentType: "application/json; charset=utf-8",
    data : JSON.stringify(data),
    success : function(result) {
        jQuery("#someContainer").html(result); // result is the HTML text
    },
});

Noch eine - wenn du posten willst:

name=John&age=34

Dann nicht stringifydie Daten und tun:

var data = {"name":"John", "age": 34}
$.ajax({
    dataType : "html",
    contentType: "application/x-www-form-urlencoded; charset=UTF-8", // this is the default value, so it's optional
    data : data,
    success : function(result) {
        jQuery("#someContainer").html(result); // result is the HTML text
    },
});
Joe Enos
quelle
Danke in der Tat :) Was ist das für ein "Erfolg": wahr. Ist es eine andere JSON-Datei im Backend? Wie wird dieser Erfolg erzielt? das ist es, was ich wirklich gerne weiß
user2759697
2
Das ist nur ein gewöhnliches Objekt - es wird gemacht, aber der Server entscheidet sich dafür. Ein Webserver kann alles senden, worauf er Lust hat - HTML, Text oder in diesem Fall ein JSON-Objekt mit einer einzelnen Eigenschaft mit dem Namen "success" und dem Wert true. Ich kann nicht erraten, was das Framework Ihrer API ist, aber in C # auf ASP.NET MVC wäre es so einfach wie[HttpPost]public JsonResult user(Person postedPerson) { /* Save postedPerson to DB */ return Json(new { success = true }); }
Joe Enos
1
Achten Sie darauf, dass Sie $.ajax({ dataType : "html", ... anstelle von verwenden sollten. $.ajax({ datatype : "html",... Das Großbuchstaben T im Worttyp ist wichtig. Überprüfen Sie jQuery API
Vadim Levkovsky
1
@Jacques Ich nehme an, sie hätten es tun können, requestContentTypeund responseDataTypein Wirklichkeit werden Sie, wenn Sie es ein paar Mal getan haben und die API verstehen, nicht verwirrt genug sein, um die zusätzliche Eingabe lohnenswert zu machen.
Joe Enos
1
@stom Die Frage und meine Antwort waren spezifisch für POST, aber wenn ich mich erinnere, wird ein gewöhnliches einfaches Objekt als Daten auf einem GET in eine Abfragezeichenfolge mit Schlüssel-Wert-Paaren umgewandelt. Ich bin mir nicht sicher, was passieren würde, wenn Sie ein komplexes Objekt mit verschachtelten Werten hätten - aber es sollte nicht schwierig sein, dies zu versuchen, wenn Sie neugierig sind. Ich würde das im wirklichen Leben niemals tun - sehr selten benutze ich AJAX sowieso jemals auf einem GET.
Joe Enos
31

Aus der jQuery-Dokumentation - http://api.jquery.com/jQuery.ajax/

contentType Verwenden Sie diesen Inhaltstyp, wenn Sie Daten an den Server senden.

dataType Der Datentyp, den Sie vom Server erwarten. Wenn keine angegeben ist, versucht jQuery, sie basierend auf dem MIME-Typ der Antwort abzuleiten

"text": Eine einfache Textzeichenfolge.

Sie möchten also, dass contentType application/jsonund dataType Folgendes sind text:

$.ajax({
    type : "POST",
    url : /v1/user,
    dataType : "text",
    contentType: "application/json",
    data : dataAttribute,
    success : function() {

    },
    error : function(error) {

    }
});
Richard Dalton
quelle
Vielen Dank in der Tat und was ist diese Anwendung in application / json. ist es ein Weg?
user2759697
1
@ user2759697 Das ist nur ein Teil des definierten MIME-Typs für JSON. Siehe diese Frage - stackoverflow.com/questions/477816/…
Richard Dalton
4
Das ist es, was ich an SO mag ... bekomme einen Repräsentanten für die Angabe des Offensichtlichen ...> _ <
Christoph
1

Unter http://api.jquery.com/jQuery.ajax/ werden dort Datentyp und Inhaltstyp erwähnt.

Sie werden beide in der Anforderung an den Server verwendet, damit der Server weiß, welche Art von Daten empfangen / gesendet werden sollen.

Jono
quelle