J'ai toujours essayé d'éviter d'utiliser la plupart des propriétés du protocole HTTP par peur de l'inconnu.
Cependant, je me suis dit que je vais affronter la peur aujourd'hui et commencer à utiliser les en-têtes à dessein. J'ai essayé d'envoyer des json
données au navigateur et de les utiliser immédiatement. Par exemple, si j'ai une fonction de gestionnaire Ajax sur l'état prêt 4 qui ressemble à ceci:
function ajaxHandler(response){
alert(response.text);
}
Et j'ai défini l'en-tête de type de contenu dans mon code PHP:
header('Content-Type: application/json');
echo json_encode(array('text' => 'omrele'));
Pourquoi ne puis-je pas accéder directement à la propriété à partir de la fonction de gestionnaire, alors que le navigateur est clairement informé que les données entrantes sont application/json
?
javascript
php
json
http
php_nub_qq
la source
la source
text
comme variable javascript dans le gestionnaire et non comme réponse? Ce serait une fonctionnalité très étrange. Le json_encode crée également 1 objet à partir de votre tableau PHP. Donc, lorsque vous obtenez cela en javascript, il doit être affecté à une variable.JSON.parse()
. Vous pouvez effectuer une action différente ou forcer une erreur si le type de contenu incorrect apparaît.response.text
toujours une chaîne.Réponses:
L'en-
Content-Type
tête est simplement utilisé comme information pour votre application. Le navigateur ne se soucie pas de ce que c'est. Le navigateur vous renvoie simplement les données de l'appel AJAX. Si vous souhaitez l'analyser en tant que JSON, vous devez le faire vous-même.L'en-tête est là pour que votre application puisse détecter quelles données ont été renvoyées et comment elle doit les gérer. Vous devez regarder l'en-tête, et si c'est
application/json
alors l'analyser comme JSON.C'est en fait ainsi que fonctionne jQuery. Si vous ne lui dites pas quoi faire avec le résultat, il utilise
Content-Type
pour détecter ce qu'il faut en faire.la source
header('Content-Type: application/json');
et ne forcez pas le téléchargement d'iciContent-Disposition: attachment; filename=myfile.json
là, vous vous retrouverez avec un fichiermyfile.json.html
. En utilisant cet en-tête json, vous obtiendrezmyfile.json
..html
au fichier, car c'est ce dont il est par défaut.Content-Type: application/json
est juste l'en-tête du contenu. L'en-tête de contenu est juste une information sur le type de données renvoyées, ex :: JSON, image (png, jpg, etc.), html.Gardez à l'esprit que JSON en JavaScript est un tableau ou un objet. Si vous voulez voir toutes les données, utilisez console.log au lieu d'alerte:
Si vous souhaitez alerter le contenu JSON d'origine sous forme de chaîne, ajoutez des guillemets simples ('):
N'utilisez pas de guillemets doubles. Cela confondra JavaScript, car JSON utilise des guillemets doubles sur chaque valeur et clé:
la source
echo "'" . json_encode(array('text' => 'it\'s wrong')) . "'";
produira cette sortie brisée:'{"text":"it's wrong"}'
. Utilisez ceci:json_encode(json_encode(array('text' => 'it\'s good')))
. Le résultat sera correctement échappé:"{\"text\":\"it's wrong\"}"
Le code ci-dessous m'aide à renvoyer un objet JSON pour JavaScript sur le front-end
Mon code de modèle
template_file.json
Code soutenu par Python
Fichier url.py
code jQuery pour le frontal
la source