Мой 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 отлично отлично.
Несколько проблем.
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 и, вероятно, связано с настройками вашего сервера. Если вы используете RStudio Shiny Server, то это не работает для PHP
В любом случае ваша конечная точка всегда должна возвращать что-то при вызове. Не просто сохранить файл. Это просто хорошая практика.
header("HTTP/1.1 200 OK");
Вы можете отредактировать свой 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']
.
Возможно, вы найдете некоторые другие способы повышения безопасности (например, разрешить только запись из собственного домена...).
I see the contents of the php
. Вы установили php?