簡體   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