Задать вопрос
MaximusDem
@MaximusDem
Начинающий разработчик

Как при клике на элемент в ответе AJAX получить элементы с таким же data-атрибутом?

Добрый день, уважаемые коллеги!
Суть в чем - я пытаюсь получить в ajax запросе при клике на div с определенным data-атрибутом ответ с элементами, которые имеют такой же data-атрибут, и не грузить все остальное. Как это можно сделать?

Вот то, что я пытался сделать. Это основной блок:
<div id="block_first">
<?php 
$material_first = get_field( 'materials_general'); //Главный повторитель
 foreach( $material_first as $main_element ): //Цикл получения значений ?>  
                        <div data-subid="<?php echo $main_element['id_material']; //вывод дата-атрибута ?>"  class=""><?php echo $main_element['materials_name']; ?></div>
                            
                      <?php   endforeach; ?>
                       
</div>
<div id="block_second"></div> <?php  //вывод здесь вывожу результаты запроса ?>


Вот мой Аякс запрос
$('#block_first div').on('click', function (event) { //отследил клик
    var post_id = <?php echo $post->ID; ?>; //получил Айди поста
    $.ajax({
  url: "/wp-admin/admin-ajax.php",
  data: {
    action: "material_query", //обратился к функции на сервер
    'post_id': post_id,  //передал на сервер Айди поста
     subid : $(this).data('subid') //передал на сервер дата-атрибут элемента, на который кликнул
  },
  success: function(data) {
    $("#block_second").append(data)  //загрузил ответ сервера  в нужный мне блок
  },
});
    });


Запрос обрабатываю в функции в файле functions.php
add_action('wp_ajax_nopriv_material_query', 'material_query');
add_action('wp_ajax_material_query','material_query');
function material_query(){
$post_id = $_GET['post_id'];
$id_elem = $_GET['subid'];
$material = get_field( 'materials_general', $post_id);
                          foreach( $material as $element ): //Основной цикл
                                ?><div data-subid="<?php echo $element['id_material']; ?> ">
                                   <?php foreach ( $element['color_materials'] as $subitem ): //Цикл, в котором передаю вложеный повторитель ?>
                                        
                                        <span><a href=""><?php echo $subitem['color_name']; ?></a></span>
                                        
                                    <?php  endforeach;?>
                                </div>
                                <div data-subid="<?php echo $element['id_material']; ?> ">
                                   <?php foreach ( $element['printing_materials'] as $subitem ): //Цикл, в котором передаю вложеный повторитель ?>                                 
                                        <span><a href=""><?php echo $subitem['printing_name']; ?></a></span>
                                        
                                    <?php  endforeach;?>
                                </div>
                            <?php                       
                        endforeach; 
die;
}

В общем, через foreach прохожу по двум массивам(основному и дополнительному повторителям). Все это отлично выводит в ответе. Но...Как отсеять лишнее? Как сделать так, чтобы в ответе было только то, что относится к элементам, имеющим тот же дата-атрибут, как и тот, по которому кликнули? Помогите, пожалуйста, а то уже столько вариантов перепробовал, сколько гуглил, ничего не работает нормально((((
  • Вопрос задан
  • 83 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы