#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 прекратить выполнение и напечатать мой результат. Обычный штамп не будет работать, есть идеи?