Пишу фильтр на с использованием ajax, который выдает пост по содержанию кастомного поля.
jQuery(function(){
jQuery('#test').submit(function(){
var filter = jQuery('#test');
var ajaxurl = '<?php echo site_url() ?>/wp-admin/admin-ajax.php';
jQuery.ajax({
url:ajaxurl,
data:filter.serialize(),
type: 'POST',
success:function(data){
jQuery('#ajax-test').html(data);
}
});
return false;
});
});
Вот сам ajax запрос, и в первую очередь грешу на него, хотя ошибок не вижу.
<form id="test">
<input name="the-date"></input>
<input type="hidden" name="action" value="date_filtering" />
<button type="submit">Отфильтровать</button>
</form>
<div id="ajax-test"></div>
Форма из которой я беру данные и блок, в который вывожу результат
function events_date_filter() {
$the_date = $_POST['the-date'];
if( isset( $the_date ))
$notargs = array(
'post_type' => 'events',
'showposts' => 3,
'meta_key' => 'event_time',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'event_date',
'value' =>$the_date,
'compare' => 'IN',
)
)
);
query_posts( $notargs );
$query = new WP_Query( $notargs );
if( $notargs->have_posts() ) :
while( $notargs->have_posts() ): $notargs->the_post();
echo '<h2>' . $notargs->post->post_title . '</h2>';
endwhile;
wp_reset_postdata();
else :
echo 'Что-то пошло не так';
endif;
}
add_action('wp_ajax_date_filtering', 'events_date_filter');
add_action('wp_ajax_nopriv_date_filtering', 'events_date_filter');
И php обработчик. Как говорится, в теории должно работать, но нет. В ответ от admin-ajax.php получаю ошибку 400, в не зависимости от того, я делаю. С начала решил, что data передается не корректно, сделал beforeSend с console.log(data) и вроде как получил корректные данные, необходимые для передачи.
Ответ 400 выдаёт admin-ajax.php
. Это уже хорошо, значит, вы до него достучались. Выдаёт он 400 в следующих случаях:
$_REQUEST['action']
У вас правильно задан хук, буквы в action и в хуке совпадают (бывает микс из русских/английских, но я проверил).
Проблема в том, что вы сериализуете данные, поэтому в отправленных данных отсутствует поле action
. Сделайте так:
jQuery( function() {
jQuery( '#test' ).submit( function() {
var filter = jQuery( '#test' );
var ajaxurl = '<?php echo site_url() ?>/wp-admin/admin-ajax.php';
jQuery.ajax( {
url: ajaxurl,
action: 'date_filtering',
type: 'POST',
success: function( data ) {
jQuery( '#ajax-test' ).html( data );
}
} );
return false;
} );
} );
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»
Всем привет, нужна помощь, хотел сделать бота в группу в вк, но появилась ошибка при получении токена приложенияПерехожу по такой ссылке:
Есть у меня поле в модели с Json строкойКак ей можно отобразить в как отоформатированный массив в DetailView::widget? То есть мне нужно сделать тоже...