Aeromax Aeromax - 1 month ago 5
Ajax Question

How to get PHP script to delete an object in JSON file?

So I have an HTML file that is dynamically populated with information from a JSON file, with an ajax _POST request.

All I'm trying to do, is grab the json (just one simple array of objects), strip out the appropriate one via it's index number passed by the ajax, and then recode the JSON back into the same file. No errors, but nothing at all is happening.

Thanks!

Here is my ajax:

$(document).ajaxComplete(function(event, xhr, settings) {
var json = "data/comments.json";
$('.delete').click(function(index) {
var deleteIndex = $(this).parent().attr('id');
var deleteIndex = parseInt(deleteIndex);
$.ajax({
type: 'POST',
url: 'data/save.php', // the url where we want to POST
data: deleteIndex,
success: function(){
location.reload();
},
error: function(){
alert('Fail!');
}
});
});
});


and here is my PHP:

<?php
$data => $_POST['deleteIndex'];
$file = file_get_contents('comments.json');
$json[] = json_decode($file, true); //return an array
foreach($json as $key => $value) {
if($value == $data) {
unset($json[$data]);
file_put_contents('comments.json', json_encode($json, JSON_PRETTY_PRINT));
}
}
?>

Answer

You didn't set the name of the value you send to your server. The data key in the request should be a {key:val} object (or a url-formatted string).

    $(document).ajaxComplete(function(event, xhr, settings) {
    var json = "data/comments.json";
    $('.delete').click(function(index) {
        var deleteIndex = $(this).parent().attr('id');
        var deleteIndex = parseInt(deleteIndex);
        $.ajax({
            type: 'POST',
            url: 'data/save.php', // the url where we want to POST
            data: {'deleteIndex': deleteIndex},
            success: function(){ 
                location.reload();
            },
            error: function(){    
                alert('Fail!');
            }
        });
    });
});

In your PHP code I think this will be much better:

$data = $_POST['deleteIndex'];
$file = file_get_contents('comments.json');
$json = json_decode($file, true); //return an array

unset($json[$data]); // I guess you want to delete the value by key
file_put_contents('comments.json', json_encode($json));
Comments