Мой 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");