繁体   English   中英

使用ajax PHP将json数据保存到json文件

[英]saving json data to json file using 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!

您的AJAX请求中的data: {stringData: stringData}表示您可以通过$data = $_POST['stringData'];在服务器上访问它$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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM