Ecco una, si spera, risposta precisa:
L'opzione accepts
permettono di modificare l'intestazione Accept
nella richiesta
Quando si modifica questa opzione, verrà impostata la Accept
intestazione nella richiesta a uno (i) specificato. Prendi nota che non si tratta di una stringa, ma di un oggetto che mappa il tipo MIME delle risposte accettate. Come { text: "text/plain", html: "text/html" }
. L'intestazione può essere utilizzata dal server per fornire la risposta nel formato previsto dalla richiesta, oppure fallire nel caso in cui non possa fornire la risposta in uno dei formati previsti dalla richiesta.
Una cosa veramente importante è che, almeno in jQuery 1.11.3 (dove ho provato), questa opzione sembra non funzionare, invece sono riuscito a cambiare l'intestazione usando l'opzione headers
: headers: {Accept : "text/json"}
.
L'opzione dataType
si lascia pre-processo della risposta
Se si definisce un dataType
, la risposta della richiesta verrà pre-trattati da jQuery prima di essere a disposizione del gestore successo. Ad esempio:
Se si specifica json
, la risposta viene analizzato utilizzando jQuery.parseJSON
prima di essere passato, come un oggetto, al gestore successo.
Se è specificato script
, $.ajax()
eseguirà il codice JavaScript ricevuto dal server prima di trasmetterlo al gestore di successo come stringa.
Altri esempi here, nella sezione "Tipi di dati".
Nel caso che dataType
non sia impostato, lo Content-Type
della risposta determinerà quale pretrattamento deve essere eseguito per la risposta. Si tenga presente che la modifica di cambierà anche l'intestazione . Di solito non è necessario modificare da soli l'intestazione .
Esempio
richiesta.php
<?php
if(strpos($_SERVER["HTTP_ACCEPT"],"text/javascript") === false)
exit("I only provide text/javascript responses");
echo "alert('This is my response!')";
index.html
<button id="send">Send</button>
<div id="response"></div>
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
$(function(){
$("#send").click(function(){
$.ajax({
method: "GET",
url: "request.php",
dataType: "script" // Change this to "text" and you will see the difference
}).done(function(data) {
$("#response").text(data);
});
});
});
</script>
Quando il dataType
è impostato "script"
l'intestazione Accept
comprenderà "text/javascript"
quindi il test su request.php
passerà. Restituirà "alert('This is my response!')"
e poiché dataType
è impostato su "script"
jQuery tenterà di eseguirlo come javascript e quindi lo passerà come testo normale al gestore di successo.
Se si cambia il dataType
-"text"
l'intestazione Accept
non includerà "text/javascript"
quindi il test sul request.php
falliranno. Restituirà "I only provide text/javascript responses"
e poiché dataType
è impostato su "text"
jQuery lo passerà come testo normale al gestore di successo.
"Si invia" vs "Si aspetta" – SerCrAsH
Per inviare è contentType, la mia domanda riguarda dataType e accetta che entrambi siano apparentemente per ciò che mi aspetto dal server. –
Sembra che 'accept' è il modo in cui devi dire al server che tipo di risposta vuoi, nel caso abbia molte opzioni da offrire, mentre' dataType' è ciò che ti aspetti come risposta in modo che la risposta sia corettamente analizzato. –