web-dev-qa-db-fra.com

Actualiser les données de la table avec Ajax

Le script ci-dessous concerne un système de modération de questions en direct que je développe. Quelqu'un pourrait me donner un indice sur la manière dont je le fais pour que le script ci-dessous actualise la requête et actualise automatiquement le résultat, ce peut être toutes les 30 secondes. Peut-être une solution à Ajax?

<?php
global $wpdb;
if (!empty($_POST)) {

$wpdb->query($wpdb->prepare("UPDATE wp_modera SET answered = 'Yes' WHERE id='" . $_POST['id']. "'"  ));

}
?>

<script>

jQuery(document).ready(function($){
    $("#form1").on("change", "input:checkbox", function(){
        $("#form1").submit();
    });

    setInterval(function(){
        $.get('#form1', function(data){
            //$("#form1").html(data).find('#form1'); 
        });
    },3000);


});
</script>

<style>
table {width: 100%;}
table tr td {border-bottom: 1px solid #666; padding: 20px 0;}
table tr td:first-child {padding-right: 20px;}
table tr td .title {color: #315AA9;}
</style>

<form id="form1" method="post" action="http://example.com/test/" >
<table>
    <?php

    global $wpdb;
    $results = $wpdb->get_results( 'SELECT id, time, city, state, question, name FROM wp_modera WHERE release = "Yes" AND flag2 <> "PLT" AND answered = "No" ORDER BY time DESC', OBJECT );

    foreach($results as $result){
        echo "<tr>";

        $phpdate = strtotime($result->time );
        $mysqldate = date( 'H:i:s', $phpdate );

        echo "<td><strong class='title'>" . $mysqldate . " - " . $result->name . " - " . $result->city . " / " . $result->state . '</strong><br><br> <strong>Question: </strong>' . $result->question . "</td>";
        echo "<td><input type='checkbox' name='id' value='" . $result->id . "' /></td>";

        echo "</tr>";
    }

    ?> 
</table>
</form>
1
Pavanello

Dans wordpress, vous devez utiliser ajax d'une manière spécifique pour respecter la norme https://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)

créez une fonction dans votre fichier functions.php pour gérer la récupération de données et/ou l'affichage de la table et ajoutez un point d'ancrage à wp_ajax_ (déclenche uniquement pour les utilisateurs connectés) et wp_ajax_nopriv_ (déclenche également pour les invités)

add_action( 'wp_ajax_add_foobar', 'prefix_ajax_add_foobar' );
add_action( 'wp_ajax_nopriv_add_foobar', 'prefix_ajax_add_foobar' );

function prefix_ajax_add_foobar() {
    // Handle request then generate response using WP_Ajax_Response
    //generate table data and build table html here

    // Don't forget to stop execution afterward.
    wp_die();
}

une fois ajouté à la page functions.php, vous pouvez inclure le JS dans votre page de script ou dans un fichier séparé.

jQuery.post(
    ajaxurl, 
    {
        'action': 'add_foobar',
        'data':   'foobarid'
    }, 
    function(response){
        alert('The server responded: ' + response);
    }
);

Ainsi, l'action ajaxurl fait référence à votre action enregistrée dans wordpress après wp_ajax_ ou wp_ajax_nopriv_. Si vous l'enregistrez comme ceci wp_ajax_nopriv_fill_my_table, votre action ajaxurl sera fill_my_table

Je suggérerais également ici de faire l'appel ajax dans une fonction JS afin que vous puissiez appeler la même fonction à l'adresse (document).ready() Voici un autre message où il est bien répondu et concerne votre question: Jquery ajax au fichier php personnalisé: retour vierge Les données

0
marwyk87