Обратный вызов WordPress AJAX

#javascript #php #jquery #ajax #wordpress

#javascript #php #jquery #ajax #wordpress

Вопрос:

У меня есть этот обратный вызов, в котором я хочу получить список данных из базы данных, когда пользователь выбрал имя в выпадающем меню. Однако я не могу понять, как правильно возвращать данные, поэтому я могу отобразить данные в таблице.

Ниже приведен мой код:

Обратный вызов AJAX

 function rdc_ajax_callback() {
    global $wpdb;

    $company_id = $_POST['company_id'];

    $coupons = $wpdb->query( $wpdb->prepare(
                                                'SELECT r.id, r.user_id, r.coupon, u.user_login, u.user_nicename
                                                FROM wp_rdc AS r
                                                INNER JOIN wp_users AS u ON u.id = r.user_id
                                                WHERE u.id = %d
                                                ORDER BY r.id ASC',
                                                array(
                                                    $company_id
                                                )
                                            )
                            );

    if ( $coupons ) {

        echo json_encode( $coupons );

    }

    die();
}
  

Скрипт AJAX

     <script type="text/javascript" >
        jQuery(document).ready(function($) {
            $("#rdc-show-user-coupons").change(function() {
                var companyID = $(this).val();

                if( companyID ) {
                    var data = {
                        'action': 'rdc_call',
                        'company_id': companyID
                    };

                    $.post(ajaxurl, data, function(response) {
                        var my_table="<table>";
                        console.log(response);
                        // $.each(response, function(i, obj){
                        //     my_table ="<tr> <td> " obj.user_id " </td> <td> " obj.coupon " </td> </tr> ";
                        // });
                        my_table "</table>";
                        $("#rdc-result").html(my_table);
                    });
                }
            });
        });
    </script>
  

Прямо сейчас я получаю это из журнала консоли:

 TypeError: invalid 'in' operand a
  

Ответ №1:

Вам нужно использовать ,

$wpdb->get_results( 'query', output_type);

Поэтому ,

     $coupons = $wpdb->query( $wpdb->prepare(
            'SELECT r.id, r.user_id, r.coupon, u.user_login, u.user_nicename
            FROM wp_rdc AS r
            INNER JOIN wp_users AS u ON u.id = r.user_id
            WHERE u.id = %d
            ORDER BY r.id ASC',
            array(
            $company_id
            )
        )
    );

$result = $wpdb->get_results( $coupons , OBJECT_K);
  

Теперь верните эту переменную, она содержит результирующий набор.

OBJECT_K — результат будет выведен в виде ассоциативного массива объектов строк, используя значения первого столбца в качестве ключей (дубликаты будут отброшены).

Редактировать :

Я думаю, что это проблема :

действие, которое вы указали в своем js, является 'action': 'rdc_call'

Теперь вы должны использовать это, иначе ajax не будет работать.

 add_action( 'wp_ajax_rdc_call', 'rdc_call' );

function rdc_call() {
//Your code to be executed after ajax call
}
  

Примечание: Имя действия должно match совпадать с именем функции.

Редактировать :

Когда вы возвращаетесь JSON type data , измените свой $.post таким образом ,

  $.post(ajaxurl, data, function(response) {
            var my_table="<table>";
            console.log(response);
            // $.each(response, function(i, obj){
            //     my_table ="<tr> <td> " obj.user_id " </td> <td> " obj.coupon " </td> </tr> ";
            // });
            my_table "</table>";
            $("#rdc-result").html(my_table);
        }, "json");
  

Комментарии:

1. Я пробовал это, но я ничего не получаю обратно. Может быть, что-то не так с моим Javascript?

2. Я пробовал, и он возвращает только массив, говорящий (новая строка («Массив»)) или что-то в этом роде. Мои действия должны соответствовать имени функции. add_action( 'wp_ajax_rdc_call', array( $this, 'rdc_ajax_callback' ) ); add_action( 'admin_footer', array( $this, 'rdb_ajax_script' ) ); и имя функции для вызова — rdc_ajax_callback(), а функция скрипта — rdb_ajax_script()

3. Круто, спасибо. Но мой массив пуст, вы можете увидеть мой обработчик AJAX прямо здесь: pastebin.com/ef5iY3G9

4. Вы проверили, что ваш запрос возвращает ожидаемый результат. ?

5. Нет, у меня нет, так как я не могу заставить скрипт обработчика базы данных php прекратить выполнение и напечатать мой результат. Обычный штамп не будет работать, есть идеи?