Sauvegarder les données de json dans le fichier json à l'aide de ajax PHP

Mon fichier json ressemble à ceci:

Count_click.json

[ { "link": "google.com", "count": 2 }, { "link": "yahoo.com", "count": 3 } ] 

Maintenant, j'ouvre ce fichier en utilisant

 $.getJSON('count_click.json',function(data){ // do something with data var stringData = JSON.stringify(data); $.ajax({ type: 'POST', contentType: 'application/json; charset=utf-8', url: 'http://127.0.0.x:3xx9/update.php', data: {stringData: stringData}, success : function(d){ alert('done');} }) }) // end of getJSON function 

Update.php

 <?php $a = file_get_contents("php://input"); file_put_contents('http://127.0.0.x:3xx9/count_click.json', json_encode($a)); ?> 

Je reçois une erreur dans la console du navigateur:

 POST http://127.0.0.x:3xx9/update.php 404 (Not Found) 

Mais le fichier est là. Lorsque je pars à ce http: //127.0.0.x: 3xx9 / update.php dans le navigateur, je vois parfaitement le contenu de l'option php fine.

Vous pouvez modifier votre PHP:

 <?php $a = $_POST['stringData']; // you should check $a consists valid json - what you want it to be file_put_contents('count_click.json', $a); 

Vous devez vraiment vérifier que les données publiées sont valides et ne pas enregistrer quelque chose de non désiré. Aussi, vous pouvez vérifier que cette demande est vraiment POST -> $_SERVER['REQUEST_METHOD'] .

Peut-être que vous trouverez d'autres méthodes pour améliorer la sécurité (par exemple, autoriser uniquement la publication à partir de son propre domaine …).

Quelques problèmes.

file_get_contents("php://input"); Pourquoi? Vous envoyez déjà une publication avec des données, pas besoin de compliquer les choses avec un flux.

De plus, file_put_contents besoin du chemin d'accès au fichier réel sur le disque, pas une URL!

data: {stringData: stringData} de votre demande AJAX signifie que vous pouvez l'accéder sur votre serveur avec $data = $_POST['stringData']; .

Il suffit d'écho à quelque chose pour voir si vous obtenez quelque chose.

echo json_encode( array("Payload" => $_POST['stringData']) );

Si cela ne fonctionne pas, essayez d'accéder au point d'extrémité avec votre navigateur (pas le fichier car il n'a pas besoin de PHP pour le navigateur pour le lire).

Pointez votre navigateur sur http://127.0.0.x:3xx9/update.php et sur votre serveur, simplement

echo "Request received!";

Si vous voyez cela dans votre navigateur, votre point final fonctionne et vous pouvez continuer le dépannage. Si vous ne le faites pas, cela va au-delà de JS et PHP et devrait probablement concerner les paramètres de votre serveur. Si vous utilisez le serveur Shiny de RStudio , cela ne fonctionne pas pour PHP

Dans tous les cas, votre point final doit toujours renvoyer quelque chose lors de son appel. Non seulement sauvegardez le fichier. C'est juste une bonne pratique.

header("HTTP/1.1 200 OK");