不向json文件添加数据

时间:2016-06-18 20:30:57

标签: javascript php ajax xmlhttprequest

我有很多关于如何将数据添加到json文件的帖子,我尝试将它们放在一起并用于我的情况,但它不起作用。基本上我所做的是使用javascript从html文件获取数据,然后使用XMLHttp请求将该数据发送到php文件,并从php文件我尝试将数据添加到.json文件。 Anywho,它没有添加它,我不知道为什么以及问题在哪里。 我的问题是关于XMLHttp请求。这是对的吗?为什么不? 关于php文件。如果问题出在XMLHttp请求中,那么php文件会将数据添加到.json文件中吗?我只是想在json文件中获取任何内容,因此我可以开始考虑使其可行的算法。 XMLHttp请求对我来说很新鲜。为了理解,这是我的代码:

的index.html:

<!DOCTYPE html>

<html>
    <head>
        <title>Project</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="css/style_mob.css" type="text/css" rel="stylesheet">
        <script src="script/jquery.js"></script>
        <script src="script/sendData.js"></script>
    </head>
    <body>
        <div id="top">
            <h1>Click only in case of an emergency!</h1>
        </div>
        <div id="divButtons">
            <button class="button" id="polizei">Polizei</button>
            <button class="button" id="feuerwehr">Feuerwehr</button>
            <button class="button" id="krankenwagen">Krankenwagen</button>
        </div>
    </body>
</html>

sendData.js:

$( document ).ready(function() {
    var type;
    var latitude;
    var longitude;
    var currentdate = new Date();
    $(".button").click(function(){
        type = $(this).attr("id");        

        var dateTime = "Date: " + currentdate.getDay() + "/"+(currentdate.getMonth()+1) 
            + "/" + currentdate.getFullYear() + " time - " 
            + currentdate.getHours() + ":" 
            + currentdate.getMinutes();

        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(sendData);
        } else {
           alert("Geolocation is not supported by this browser.");
        }
        function sendData(position) {
            latitude = position.coords.latitude;
            longitude = position.coords.longitude;          
        }
        var hr = new XMLHttpRequest();
        hr.open("POST", "emergencyData.php", true);
        hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        alert("about to send data to php file");
        hr.send("type="+type+"&latitude="+latitude+"&longitude="+longitude+"$dateTime="+currentdate+"");
    });


});

emergencyData.php:

<?php
    header("Content-Type: application/json");
    $type = $_POST["type"];
    $latit = $_POST["latitude"];
    $longit = $_POST["longitude"];
    $dateTime = $_POST["dateTime"];
    echo $type;
    // Loading existing data:
    $json = file_get_contents("emergencyData.json");
    $data = json_decode($json, true);

    // Adding new data:
    $data[0] = array('type' => $type, 'latitude' => $latit, 'longitude' => $longit, 'date' => $dateTime);

    // Writing modified data:
    file_put_contents('emergencyData.json', json_encode($data, JSON_FORCE_OBJECT));
?>

1 个答案:

答案 0 :(得分:0)

你在javascript中输错了。

delete

hr.send("type="+type+"&latitude="+latitude+"&longitude="+longitude+"$dateTime="+currentdate+""); $的{​​{1}}应为dateTime

此外,我认为您希望&成为&dateTime="+currentdate+""。额外&dateTime="+dateTime是不必要的。

最后,如果您想继续添加新数据而不是覆盖旧数据,请在PHP脚本中使用:

+""

否则每次旧的JSON数据都会被新的数据替换。