it-swarm.com.ru

Обновить данные таблицы с помощью Ajax

Скрипт ниже для живой системы модерации вопросов, которую я разрабатываю. Кто-то может подсказать мне, как сделать так, чтобы приведенный ниже скрипт обновлял запрос и обновлял результат автоматически, это может происходить каждые 30 секунд. Может быть, какое-то решение в 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

В WordPress вам нужно использовать ajax определенным образом, чтобы следовать стандарту https://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)

создайте функцию в вашем файле functions.php для обработки извлечения данных и/или отображения таблицы и добавьте хук к wp_ajax_ (срабатывает только для зарегистрированных пользователей) и wp_ajax_nopriv_ (также для гостей)

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();
}

после добавления на страницу functions.php вы можете включить JS на страницу скрипта или в отдельный файл.

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

Таким образом, действие ajaxurl относится к вашему действию, зарегистрированному в WordPress после wp_ajax_ или wp_ajax_nopriv_. Если вы зарегистрируете его следующим образом wp_ajax_nopriv_fill_my_table, ваше действие ajaxurl будет fill_my_table

Я также предложил бы здесь сделать вызов ajax в функции JS, чтобы вы могли вызывать ту же функцию в (document).ready(). Вот еще один пост, в котором на него хорошо дан ответ и он относится к вашему вопросу: Jquery ajax в пользовательский файл php: возвращая пустое данные

0
marwyk87