сохранение json-данных в json-файл с помощью ajax PHP

Мой json-файл выглядит так:

count_click.json

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

теперь я открываю этот файл, используя

 $.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)); ?> 

Я получаю ошибку в консоли браузера:

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

Но файл есть. Когда я перехожу к этому http: //127.0.0.x: 3xx9 / update.php в браузере, я вижу, что содержание php отлично отлично.

Вы можете отредактировать свой 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); 

Вы действительно должны проверить, что опубликованные данные действительны и не сохраняют что-то нежелательное. Также вы можете проверить, действительно ли запрос POST -> $_SERVER['REQUEST_METHOD'] .

Возможно, вы найдете некоторые другие способы повышения безопасности (например, разрешить только запись из собственного домена …).

Несколько проблем.

file_get_contents("php://input"); Зачем? Вы уже отправляете сообщение с данными, не нужно усложнять работу потоком.

Также file_put_contents нужен путь к фактическому файлу на диске, а не к URL!

data: {stringData: stringData} из вашего запроса AJAX означает, что вы можете получить к нему доступ на сервере с помощью $data = $_POST['stringData']; ,

Просто повторите что-нибудь, чтобы увидеть, действительно ли вы получаете что-либо.

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

Если это не сработает, попробуйте получить доступ к конечной точке в своем браузере (а не файл, который не требует PHP для чтения браузера).

Направьте свой браузер на http://127.0.0.x:3xx9/update.php и на свой сервер, просто

echo "Request received!";

Если вы видите, что в вашем браузере ваша конечная точка работает, и вы можете продолжить поиск и устранение неисправностей. Если вы этого не сделаете, это будет за пределами JS и PHP и, вероятно, связано с настройками вашего сервера. Если вы используете Shiny Server RStudio , то это не работает для PHP

В любом случае ваша конечная точка всегда должна возвращать что-то при вызове. Не просто сохранить файл. Это просто хорошая практика.

header("HTTP/1.1 200 OK");