Saya menulis kode ini:

$('.actionButton').click(function(){
            var buttonValue = $(this).val();
            var userId = '<?php echo $_SESSION['id']; ?>';
            console.log(userId);
            $.ajax({
                type: 'POST',
                url: 'ajax.php',
                data: {
                    'action': buttonValue,
                    'id' : userId
                },
                dataType: 'json',
                success: [ location.reload()]
            });
        });

Dengan tombol-tombol ini:

<?php
                if(!isset($_GET['messages']) || $_GET['messages'] == 'inbox')
                    echo '<div class="card-header">
                    Messages<button class="btn btn-sm btn-success pull-right actionButton" title="Mark all as read" value="readAll"><i class="fa fa-envelope-open"></i></button>
                    <button class="btn btn-sm btn-default pull-right actionButton" id="buttonAlignment" value="unreadAll" title="Mark all as unread"><i class="fa fa-envelope"></i></button>
                </div>';
                else{
                    echo '<div class="card-header">
                    Messages<button class="btn btn-sm btn-danger pull-right actionButton" value="removeAll" title="Remove all"><i class="fa fa-trash"></i></button>
                </div>';
                }
                ?>

Dan skrip PHP ini untuk dieksekusi pada panggilan Ajax:

require_once '../includes/includeDatabase.php';

if(isset($_POST['action'])){
    $id = $_POST['id'];
    switch($_POST['action']){
        case 'removeAll':
            removeAll($database, $id);
            break;
        case 'readAll':
            readAll($database, $id);
            break;
        case 'unreadAll':
            unreadAll($database, $id);
            break;
        default:
            break;
    }
}

function removeAll($db, $id){
    /* @var $db Database */
    $db->executeQuery('portal', "DELETE FROM messages WHERE userId = $id AND messageDeleted = 1");
}
function readAll($db, $id){
    /* @var $db Database */
    $db->executeQuery('portal', "UPDATE messages SET messageRead = 1 WHERE userId = '$id'");
}
function unreadAll($db, $id){
    /* @var $db Database */
    $db->executeQuery('portal', "UPDATE messages SET messageRead = 0 WHERE userId = '$id'");
}

Saya tahu saya harus mengikat $id ke kueri untuk menghindari injeksi SQL sebelum ada yang mulai mengeluh tentang itu. Bukan itu pertanyaannya untuk saat ini.

Pertanyaan saya: Kode ini berfungsi penuh tetapi sangat mengganggu ketika saya mengklik tombol hapus semua atau baca Semua atau belum dibaca Semua. Bahwa halaman saya disegarkan, saya tahu ini terjadi karena saya memberi tahu ajax untuk melakukan location.reload() tetapi jika saya tidak melakukan ini, tabel saya tidak akan tahu bahwa data telah berubah.

Bagaimana saya bisa membuatnya sehingga ketika saya mengklik tombol halaman saya akan tahu bahwa datanya diubah?

0
Sander Bakker 14 Agustus 2017, 11:25

2 jawaban

Jawaban Terbaik

Memang bukan cara terbaik untuk melakukan ini, tetapi solusi sederhana adalah dengan menggemakan tindakan apa pun yang Anda lakukan pada file php seperti ini:

if(isset($_POST['action'])){
    $id = $_POST['id'];
    switch($_POST['action']){
        case 'removeAll':
            removeAll($database, $id);
            break;
        case 'readAll':
            readAll($database, $id);
            break;
        case 'unreadAll':
            unreadAll($database, $id);
            break;
        default:
            break;
    }
    die($_POST['action']);
}

Sekarang pemanggil ajax Anda dapat mengambil ini seperti ini:

      $.ajax({
            type: 'POST',
            url: 'ajax.php',
            data: {
                'action': buttonValue,
                'id' : userId
            },
            dataType: 'json',
            success: function (response)
            {
                if(response =='removeAll')
                {
                    //remove all remove the table by emptying the div or something
                }
                elseif(response =='readAll')
                {
                    //perform read all action
                }
                esleif(response =='unreadAll')
                {
                    //perform unreadall action
                }

            }
        });

Untuk memperbarui tabel, saya sarankan menggunakan plugin yang dapat didata untuk jquery yang memungkinkan Anda menambah/menghapus baris dan banyak lagi.

1
Amit Joshi 14 Agustus 2017, 09:05

Saya akan menyarankan hal berikut:

Pertama-tama Anda perlu memastikan semua kueri sql Anda berjalan dengan benar tanpa masalah dan akan menjadi ide yang baik untuk memeriksa pernyataan if, jika berjalan dengan benar dan mengembalikan pesan benar dan salah ke permintaan ajax. Setelah permintaan ajax Anda berhasil dan file php mengembalikan pesan sebenarnya yang dapat Anda gunakan, jQuery menyembunyikan atau menghapus fungsi untuk menghapus pesan yang dipilih. Dengan cara ini Anda tidak perlu memuat ulang halaman. Beri tahu saya jika ada yang tidak jelas. Saya harap ini akan membantu Anda.

0
Santosh Sapkota 14 Agustus 2017, 08:52