Che cos'è il tipo di contenuto e il tipo di dati in una richiesta AJAX?


179

Che cos'è il tipo di contenuto e il tipo di dati in una richiesta POST? Supponiamo di avere questo:

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

    },
    error : function(error) {

    },

È contentTypequello che inviamo? Quindi ciò che inviamo nell'esempio sopra è JSON e ciò che riceviamo è un testo semplice? Non capisco davvero.

Risposte:


304

contentTypeè il tipo di dati che stai inviando, quindi application/json; charset=utf-8è comune, così come è application/x-www-form-urlencoded; charset=UTF-8, che è l'impostazione predefinita.

dataTypeè quello che vi aspettate dal server: json, html, text, ecc jQuery userà questo per capire come popolare parametro della funzione successo.

Se pubblichi qualcosa come:

{"name":"John Doe"}

e in attesa di nuovo:

{"success":true}

Quindi dovresti avere:

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
    },
});

Se ti aspetti quanto segue:

<div>SUCCESS!!!</div>

Quindi dovresti fare:

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
    },
});

Ancora uno - se vuoi pubblicare:

name=John&age=34

Quindi non stringifyi dati e fai:

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
    },
});

grazie davvero :) cos'è questo "successo": vero. è un altro file json nel backend? come si ottiene questo successo? questo è quello che mi piace davvero sapere
user2759697

2
Questo è solo un oggetto ordinario - è realizzato tuttavia il server decide di realizzarlo. Un web server può inviare qualsiasi cosa si senta - HTML, testo o, in questo caso, un oggetto JSON con una singola proprietà con nome "successo" e valore vero. Non riesco a indovinare quale sia il framework della tua API, ma in C # su ASP.NET MVC sarebbe qualcosa di semplice come[HttpPost]public JsonResult user(Person postedPerson) { /* Save postedPerson to DB */ return Json(new { success = true }); }
Joe Enos,

1
Fai attenzione che dovresti usare $.ajax({ dataType : "html", ... invece di $.ajax({ datatype : "html",... Maiuscola T nella parola Tipo è importante. Controlla l' API jQuery
Vadim Levkovsky,

1
@Jacques Suppongo che avrebbero potuto farlo requestContentTypee responseDataType, in realtà, una volta che l'hai fatto un paio di volte e hai capito l'API, non sarai abbastanza confuso da rendere utile la digitazione extra.
Joe Enos,

1
@stom La domanda e la mia risposta erano specifiche di POST, ma se ricordo, se passi un normale oggetto semplice come i dati su un GET, lo trasformerà in una stringa di query con coppie chiave-valore. Non sono sicuro di cosa succederebbe se avessi un oggetto complesso con valori nidificati, ma non dovrebbe essere difficile provarlo se sei curioso. Tuttavia, non lo farei mai nella vita reale, ma raramente uso AJAX su GET.
Joe Enos,

32

Dalla documentazione di jQuery - http://api.jquery.com/jQuery.ajax/

contentType Quando si inviano dati al server, utilizzare questo tipo di contenuto.

dataType Il tipo di dati che ti aspetti dal server. Se non viene specificato nessuno, jQuery proverà a dedurlo in base al tipo MIME della risposta

"testo": una stringa di testo semplice.

Quindi vuoi che contentType sia application/jsone dataType che sia text:

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

    },
    error : function(error) {

    }
});

grazie davvero e qual è questa applicazione in application / json. è un percorso?
user2759697

1
@ user2759697 È solo una parte del tipo MIME definito per JSON. Visualizza questa domanda - stackoverflow.com/questions/477816/…
Richard Dalton,

4
Questo è quello che mi piace di SO ... ottenere rappresentante per affermare l'ovvio ...> _ <
Christoph

1

Vedi http://api.jquery.com/jQuery.ajax/ , c'è menzione di tipo di dati e contentType lì.

Entrambi sono utilizzati nella richiesta al server in modo che il server sappia quale tipo di dati ricevere / inviare.

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.