$ .ajax - dataType


135

Qual è la differenza tra

contentType: "application/json; charset=utf-8",
dataType: "json",

vs.

contentType: "application/json",
dataType: "text",

Risposte:


181
  • contentTypeè l' intestazione HTTP inviata al server, specificando un formato particolare.
    Esempio: sto inviando JSON o XML
  • dataTypestai dicendo a jQuery che tipo di risposta aspettarsi.
    Prevedere JSON, XML o HTML, ecc. L' impostazione predefinita è jQuery per provare a capirlo.

La $.ajax()documentazione contiene anche descrizioni complete di questi.


Nel tuo caso particolare, il primo sta chiedendo la risposta di essere in UTF-8, il secondo non si preoccupa. Anche il primo tratta la risposta come un oggetto JavaScript, il secondo la tratta come una stringa.

Quindi il primo sarebbe:

success: function(data) {
  // get data, e.g. data.title;
}

Il secondo:

success: function(data) {
  alert("Here's lots of data, just a string: " + data);
}

1
qual è il modo più preferito o più consigliato.
Nick Kahn,

1
@Adu - Nessuna risposta diretta per questo, dipende da cosa vuoi fare con il risultato ... stanno facendo 2 cose diverse. Idealmente, a meno che non sia un risultato molto semplice, probabilmente vorrai avere a che fare con JSON, nel qual caso il primo sarebbe più semplice.
Nick Craver

2
Musa ha ragione, contentType indica quale formato stiamo inviando al server (ad es. Corpo della posta), non ciò che viene richiesto.
antinome,

@antinome quei 2 sono di solito molto uniti, è importante qui su Stack Overflow in molti punti esempio. A rigor di termini sono indipendenti, ho aggiornato per riflettere questo.
Nick Craver

Non c'è ancora posto dove posso trovare ciò che è predefinito, intendo che sto andando manuale e ricostruendo l'oggetto dopo ogni chiamata, ma nel reimpostare, sto avendo problemi. se lo imposto su "json" come predefinito, ciò non completerà in alcun modo l'intelligente ipotesi, ma funziona fino a un certo punto, fino a quando non arriva alla chiamata in cui non ho specificato (che NON è una chiamata JSON stessa), quindi se l'ho impostato su stringa vuota, o null, sembra rompere tutto. posso impostare qualcosa come 'default' o f'in 'Intellgent Guess' per l'amor di Dio? QUAL È il default tecnico, ovvero come definito tra due virgolette dataType = ""?
blamb

51

(ps: la risposta data da Nick Craver non è corretta)

contentType specifica il formato dei dati inviati al server come parte della richiesta (può essere inviato anche come parte della risposta, ne parleremo più avanti).

dataType specifica il formato previsto dei dati che devono essere ricevuti dal client (browser).

Entrambi non sono intercambiabili.

  • contentTypeè l'intestazione inviata al server, che specifica il formato dei dati (ovvero il contenuto del corpo del messaggio) che si trova sul server. Viene utilizzato con richieste POST e PUT. Di solito quando si invia una richiesta POST, il corpo del messaggio comprende parametri passati come:

==============================

Esempio di richiesta:

POST /search HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 
<<other header>>

name=sam&age=35

==============================

L'ultima riga sopra "nome = sam & age = 35" è il corpo del messaggio e contentType lo specifica come application / x-www-form-urlencoded poiché stiamo passando i parametri del modulo nel corpo del messaggio. Tuttavia non ci limitiamo a inviare solo i parametri, possiamo inviare json, xml, ... in questo modo (l'invio di diversi tipi di dati è particolarmente utile con i servizi Web RESTful):

==============================

Esempio di richiesta:

POST /orders HTTP/1.1
Content-Type: application/xml
<<other header>>

<order>
   <total>$199.02</total>
   <date>December 22, 2008 06:56</date>
...
</order>

==============================

Quindi ContentType questa volta è: application / xml, perché è quello che stiamo inviando. Gli esempi precedenti hanno mostrato una richiesta di esempio, allo stesso modo la risposta inviata dal server può anche avere l'intestazione Content-Type che specifica ciò che il server sta inviando in questo modo:

==============================

risposta del campione:

HTTP/1.1 201 Created
Content-Type: application/xml
<<other headers>>

<order id="233">
   <link rel="self" href="http://example.com/orders/133"/>
   <total>$199.02</total>
   <date>December 22, 2008 06:56</date>
...
</order>

==============================

  • dataTypespecifica il formato della risposta da aspettarsi. È correlato all'intestazione Accept. JQuery proverà a dedurlo in base al tipo di contenuto della risposta.

==============================

Esempio di richiesta:

GET /someFolder/index.html HTTP/1.1
Host: mysite.org
Accept: application/xml
<<other headers>>

==============================

La richiesta sopra è in attesa di XML dal server.

Per quanto riguarda la tua domanda,

contentType: "application/json; charset=utf-8",
dataType: "json",

Qui si inviano dati json utilizzando il set di caratteri UTF8 e ci si aspetta che i dati json vengano restituiti dal server. Secondo i documenti JQuery per dataType,

Il tipo json analizza il file di dati recuperato come oggetto JavaScript e restituisce l'oggetto costruito come dati risultato.

Quindi, ciò che ottieni nel gestore del successo è un oggetto javascript corretto (JQuery converte l'oggetto json per te)

mentre

contentType: "application/json",
dataType: "text",

Qui stai inviando dati json, dal momento che non hai menzionato la codifica, secondo i documenti JQuery,

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 poiché dataType è specificato come testo, ciò che ottieni nel gestore dei successi è un testo semplice, secondo i documenti per dataType,

I tipi di testo e xml restituiscono i dati senza elaborazione. I dati vengono semplicemente passati al gestore del successo


7

come da documenti :

  • "json": Valuta la risposta come JSON e restituisce un oggetto JavaScript. In jQuery 1.4 i dati JSON vengono analizzati in modo rigoroso; qualsiasi JSON non valido viene rifiutato e viene generato un errore di analisi. (Vedi json.org per maggiori informazioni sulla corretta formattazione JSON.)
  • "text": Una stringa di testo semplice.

2

Il caricatore jQuery Ajax non funziona bene quando si chiamano due API contemporaneamente. Per risolvere questo problema devi chiamare le API una ad una usando la isAsyncproprietà nell'impostazione Ajax. È inoltre necessario assicurarsi che non vi siano errori nell'impostazione. Altrimenti, il caricatore non funzionerà. Ad esempio un tipo di contenuto non definito, un tipo di dati per la chiamata POST / PUT / DELETE / GET.


Se fornisci una descrizione migliore, questa è una buona risposta ... inserisci maggiori informazioni in questo post.
Wahwahwah,
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.