8

I've been working on a delete post functionality in my project. It all works fine in PHP, but now I'd like to do that in Ajax, to prevent the refresh and all.

Anyway, when I perform my ajax call, I get an error:

SyntaxError: Unexpected end of JSON input
at Object.parse (native)
at n.parseJSON (http://localhost/imdstagram/public/js/jquery-2.2.3.min.js:4:6401)
at Ab (http://localhost/imdstagram/public/js/jquery-2.2.3.min.js:4:8347)
at z (http://localhost/imdstagram/public/js/jquery-2.2.3.min.js:4:11804)
at XMLHttpRequest.<anonymous> (http://localhost/imdstagram/public/js/jquery-2.2.3.min.js:4:15680)

It says that this error is on line 35, line 35 sends me to

console.log(error);

Anyway, to give you a better view, here is my Ajax call:

$(document).ready(function(){

    $(".post__delete").on("click", function(e){
        var postDeleteID = $('.deleteID').val();

        $.ajax({
            url: "ajax/deletePost.php", 
            type: "POST",             
            data: JSON.stringify(postDeleteID),
            dataType: 'json',
            contentType: false,
            cache: false,
            processData: false,
            success: function(data)
            {

            },
            error: function (request, status, error) {
                console.log(error);
            }
        });

        e.preventDefault();
    });
});

And my deletePost.php code:

<?php
    include_once("../classes/Post.class.php");
    session_start();
    $post = new Post();

    if(!empty($_POST)){
        $deletePostID = $_POST['deletePostID'];

        $post->deletePost($deletePostID);

        if($post->deletePost($deletePostID)){
            $status['delete'] = "success";
        } else {
            $status['delete'] = "failed";
        }

        header('Content-Type: application/json; charset=utf-8', true);
        echo json_encode($status);
    }

?>

I've tried many things like changing the dataType and contentType, but nothing seems to work out.

3
  • 3
    You've not provided the full exception message, nor the JSON that appears to be corrupt. We'll need those. Commented May 5, 2016 at 18:27
  • Yeah you're absolutely right, sorry for that. Commented May 5, 2016 at 18:30
  • Might be a bit off topic, but it seems you'd benefit from making the deletePost method a static one. That way you would not have to create an instance of the Post class when you want to delete a post, which makes more sense semantically as well as logically Commented Dec 3, 2016 at 13:31

4 Answers 4

8

Your request is wrong, you should not be sending json if you expect to use the $_POST super global. Send it as regular url encoded form data

    $.ajax({
        url: "ajax/deletePost.php", 
        type: "POST",             
        data: {postDeleteID: postDeleteID},
        dataType: 'json',
        cache: false,
        success: function(data)
        {

        },
        error: function (request, status, error) {
            console.log(error);
        }
    });
Sign up to request clarification or add additional context in comments.

5 Comments

Oh, you're right. I changed it, but I still get the same error.
I forgot to take out the preocessData: false, try now
Without the processData: false I get the following response: SyntaxError: Unexpected token < in JSON at position 0 at Object.parse (native) at n.parseJSON (localhost/imdstagram/public/js/jquery-2.2.3.min.js:4:6401) at Ab (localhost/imdstagram/public/js/jquery-2.2.3.min.js:4:8347) at z (localhost/imdstagram/public/js/jquery-2.2.3.min.js:4:11804) at XMLHttpRequest.<anonymous> (localhost/imdstagram/public/js/jquery-2.2.3.min.js:4:15680)
That looks like you have html in you response.
Thanks, I'll continue looking for the problem.
7

Try to change the dataType to 'text' and contentType to 'application/json'

Comments

1

You are "deleting" the post twice.

Remove this line: $post->deletePost($deletePostID);

1 Comment

Thanks for that, deleted the line.
-1

This is a very strange problem within frameworks and PHP in general, in your controller just:

echo(json_encode($status));

Has worked for me ..

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.