Skip to content
Advertisement

How To Target A Specific PHP Function Using Ajax

I am creating a simple comment program. i want to use ajax to refresh the comments and total number of comments. Keeping both functions in a single file is not working for me.

here is my code:

HTML:

<h3></h3>
<ul>
        
</ul>

PHP: include.php

//for comments
function main(){
    try {
        $query = connect()->prepare("SELECT * FROM comments WHERE article_id = 1627359589");
        $query->execute();
        echo json_encode($query->fetchAll());

    } catch (PDOException $e) {
        die("database connection failed");
    }
}

// for total comment
function totalComment(){
        $sql ="SELECT * FROM comments WHERE article_id = 1627359589";
        $stmt = connect()->prepare($sql);
        $stmt->execute();
        $num = $stmt->rowCount();
        echo json_encode($num);
}

main();
totalComment();

AJAX:

// for comment
setInterval(displayComments, 2000);

function displayComments(){
       $.ajax({
            url: "include.php",
            type: "POST",
            dataType: "JSON",
            success: function(data){
                for (var i = 0; i < data.length; i++) {
                    $("ul").append("<li>"+data[i] + "</li>")
                }
            }
        })
}

// for total comments
setInterval(total, 2000);
function total(){
            $.ajax({
                url: "include.php",
                success: function(data){
                    $("h3").html(data);
                }
              
            })
    }

Advertisement

Answer

Set the PHP to process a named POST item and use switch to determine which function to use:

<?php
    if( $SERVER['REQUEST_METHOD']=='POST' && isset( $_POST['cmd'] )){
    

        function main(){
            try {
                $query = connect()->prepare("SELECT * FROM comments WHERE article_id = 1627359589");
                $query->execute();
                echo json_encode($query->fetchAll());

            } catch (PDOException $e) {
                die("database connection failed");
            }
        }

        function totalComment(){
                $sql ="SELECT * FROM comments WHERE article_id = 1627359589";
                $stmt = connect()->prepare($sql);
                $stmt->execute();
                $num = $stmt->rowCount();
                echo json_encode($num);
        }
        
        
        
        switch( $_POST['cmd'] ){
            case 'comments':
                main();
            break;
            case 'total':
                totalComment();
            break;
            case 'banana':
                banana();
            break;
        }
    }
    
?>

In your javascript set the same parameter in each request but with a different value: data:{cmd:'banana'}, etc

function displayComments(){
    $.ajax({
        url: "include.php",
        type: "POST",
        data:{cmd:'comments'},
        dataType: "JSON",
        success: function(data){
            for (var i = 0; i < data.length; i++) {
                $("ul").append("<li>"+data[i] + "</li>")
            }
        }
    })
}
function total(){
    $.ajax({
        url: "include.php",
        data:{cmd:'total'},
        success: function(data){
            $("h3").html(data);
        }
    })
}


setInterval(displayComments, 2000);
setInterval(total, 2000);

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement