Je viens de créer une fonction JQuery ajax
pour récupérer des données json-encoded
De PHP
, voici mon code:
nom de fichier: bank.php
$('form').on('submit', function(){
var datatobesent = $(this).serialize();
$.ajax({
data: datatobesent,
url:'data.php',
type:'GET'
})
.done(function(data){
console.log(typeof(data));
});
return false;
})
et en data.php
j'ai écrit
if(isset($_GET)){
$data = $_GET;
echo json_encode($data);
header("Content-type:application/json");
}
la question est, quand je supprime la ligne de header("Content-type:application/json");
dans data.php
le console.log
indique que le type de données retourné par ajax
est string
.
Et quand j'ai ajouté dataType :
Json`` à l'intérieur de la fonction ajax
dans bank.php
Le type change en object
alors quelle est la fonction de header("Content-type:application/json");
en fait?
La fonction header("Content-type:application/json")
envoie l'en-tête http json au navigateur pour l'informer du type de données qu'il attend. Vous pouvez voir tous les en-têtes http pour chaque demande dans votre navigateur (Si vous utilisez chrome ouvrez les outils de développement, accédez au réseau, ajustez la vue et rechargez la page, vous verrez toutes les demandes effectuées) par votre navigateur, si vous cliquez sur n'importe laquelle de ces demandes, puis cliquez sur les en-têtes, vous verrez les en-têtes de chaque demande).
Lorsque vous utilisez cette fonction, vous remarquerez l'en-tête http Content-Type:application/json
dans la réponse envoyée par le serveur. Si vous ne l'utilisez pas, le serveur enverra la valeur par défaut qui est probablement Content-type:text/html; charset=UTF-8
Comme @Monty l'a déclaré, vous n'avez pas besoin de cette fonction si vous avez ajouté dataType: 'json'
à votre AJAX car Jquery gérera les données même si elles sont envoyées avec un en-tête text/html.
Voir aussi: jQuery AJAX Appel à PHP Script avec retour JSON
Pour en savoir plus sur les en-têtes: http-headers-for-dummies