Je veux retourner JSON à partir d'un script PHP.
Dois-je simplement faire écho au résultat? Dois-je définir l'en- Content-Type
tête?
Bien que vous soyez généralement bien sans cela, vous pouvez et devez définir l'en-tête Content-Type:
<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
Si je n'utilise pas un cadre particulier, j'autorise généralement certains paramètres de demande à modifier le comportement de sortie. Il peut être utile, généralement pour un dépannage rapide, de ne pas envoyer d'en-tête, ou parfois d'imprimer la charge utile de données pour le surveiller (bien que dans la plupart des cas, cela ne devrait pas être nécessaire).
header('Content-type:application/json;charset=utf-8');
Un morceau complet de code PHP agréable et clair renvoyant JSON est:
la source
Selon le manuel sur
json_encode
la méthode peut renvoyer une non-chaîne ( faux ):Lorsque cela se
echo json_encode($data)
produit, la chaîne vide sera sortie, ce qui n'est pas JSON non valide .json_encode
échouera (et reviendrafalse
) par exemple si son argument contient une chaîne non UTF-8.Cette condition d'erreur doit être capturée en PHP, par exemple comme ceci:
Ensuite, l'extrémité de réception doit bien sûr être consciente que la présence de la propriété jsonError indique une condition d'erreur, qu'elle doit traiter en conséquence.
En mode production, il peut être préférable d'envoyer uniquement un état d'erreur générique au client et de consigner les messages d'erreur plus spécifiques pour une enquête ultérieure.
En savoir plus sur la gestion des erreurs JSON dans la documentation de PHP .
la source
charset
paramètre pour JSON; voir la note à la fin de tools.ietf.org/html/rfc8259#section-11 : "Aucun paramètre 'charset' n'est défini pour cet enregistrement. L'ajout d'un n'a vraiment aucun effet sur les destinataires conformes." (JSON doit être transmis en UTF-8 par tools.ietf.org/html/rfc8259#section-8.1 , donc spécifier qu'il est encodé en UTF-8 est un peu redondant.)charset
Paramètre redondant supprimé de la chaîne d'en-tête HTTP.Essayez json_encode pour encoder les données et définissez le type de contenu avec
header('Content-type: application/json');
.la source
Définissez le type de contenu avec
header('Content-type: application/json');
, puis faites écho à vos données.la source
Il est également bon de définir la sécurité d'accès - il suffit de remplacer * par le domaine que vous souhaitez pouvoir atteindre.
Voici plus d'exemples à ce sujet: comment contourner Access-Control-Allow-Origin?
la source
la source
Comme dit ci-dessus:
fera le travail. mais gardez à l'esprit que:
Ajax n'aura aucun problème à lire json même si cet en-tête n'est pas utilisé, sauf si votre json contient des balises HTML. Dans ce cas, vous devez définir l'en-tête comme application / json.
Assurez-vous que votre fichier n'est pas codé en UTF8-BOM. Ce format ajoute un caractère en haut du fichier, donc votre appel header () échouera.
la source
Une fonction simple pour renvoyer une réponse JSON avec le code d'état HTTP .
la source
header_remove
et définir explicitement la réponse http est une bonne idée; bien que définir le statut puis http_response semble redondant. Pourrait également vouloir ajouter uneexit
déclaration à la fin. J'ai combiné votre fonction avec celle de @trincot: stackoverflow.com/a/35391449/339440La réponse à votre question est ici ,
Ça dit.
donc si vous définissez l'en-tête sur ce type et que vous sortez votre chaîne JSON, cela devrait fonctionner.
la source
Oui, vous devrez utiliser l'écho pour afficher la sortie. Type MIME: application / json
la source
Si vous devez obtenir json de php en envoyant des informations personnalisées, vous pouvez l'ajouter
header('Content-Type: application/json');
avant d'imprimer autre chose, alors vous pouvez imprimer votre customeecho '{"monto": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';
la source
Si vous interrogez une base de données et avez besoin du jeu de résultats au format JSON, cela peut être fait comme ceci:
Pour obtenir de l'aide sur l'analyse du résultat à l'aide de jQuery, consultez ce didacticiel .
la source
Il s'agit d'un simple script PHP pour renvoyer un identifiant mâle femelle et un identifiant utilisateur, car la valeur json sera une valeur aléatoire lorsque vous appellerez le script json.php.
J'espère que cette aide merci
la source
Un moyen simple de formater vos objets de domaine en JSON est d'utiliser le Marshal Serializer . Passez ensuite les données à
json_encode
et envoyez l'en-tête Content-Type correspondant à vos besoins. Si vous utilisez un framework comme Symfony, vous n'avez pas besoin de régler manuellement les en-têtes. Là, vous pouvez utiliser JsonResponse .Par exemple, le type de contenu correct pour traiter avec Javascript serait
application/javascript
.Ou si vous devez prendre en charge certains navigateurs assez anciens, le plus sûr serait
text/javascript
.À toutes autres fins, comme une application mobile, utilisez
application/json
le type de contenu.Voici un petit exemple:
la source
Chaque fois que vous essayez de renvoyer une réponse JSON pour l'API, sinon assurez-vous que vous disposez des en-têtes appropriés et assurez-vous également de renvoyer des données JSON valides.
Voici l'exemple de script qui vous aide à renvoyer la réponse JSON à partir d'un tableau PHP ou d'un fichier JSON.
la source
Vous pouvez utiliser cette petite bibliothèque PHP . Il envoie les en-têtes et vous donne un objet pour l'utiliser facilement.
On dirait :
la source