Bonjour les ami(e)s,
J'ai un gro petit soucis, je m'explique:

j'ai un tableau avec DataTable de jquery, les données qui y sont ont des sous categories, pour les charger sur la même table bah je detruit les données qui y sont et je recharge juste le contenue de ma table.La recherche marche a la page de demarrage mais après avoir changer le contenue la recherche ne marche pas et si je regarche la page bah elle reviens a la page initiale au lieu de garder les donnée qui y sont deja.

Mon script:

    // ===========================
    // Init datatable
    // ===========================
    publics.bindInitDatatable = function (id = null, type = null) {
        // $.fn.dataTable.ext.legacy.ajax = true;
        var $this = $('#antibiotic_datatable');
        if (null != id || (null != id && null != type)) {
            $this.DataTable().clear().destroy();
        }

        var aoColumns = [{"bSortable": false, "bVisible": false}, {"bSortable": true}, {"bSortable": true}, {"bSortable": true}, {"bSortable": false}];
        var sAjaxSource = id == null
            ?
            Routing.generate('antibiotic_ajaxGetListRefdata')
            :
            null == type
            ?
            Routing.generate('antibiotic_ajaxGetListRefdata', {'id' : id})
           :
           Routing.generate('antibiotic_ajaxGetListRefdata', {'id' : id, 'type': type})
           ;

        $this.DataTable(
            {
                "pageLength": 10,
                "aoColumns": aoColumns,
                "order": [[ 0, "desc" ]],
                "bProcessing": true,
                "bServerSide": true,
                "searching": true,
                "sAjaxSource": sAjaxSource,
                "paging": true,
                "oLanguage": {
                    "sProcessing": "traitement...",
                    "oPaginate": {
                        "sPrevious": "Précédente",
                        "sNext": "Suivante",
                    },
                    "sSearch": "Filtrer: ",
                    "sLengthMenu": "Afficher _MENU_ enregistrements par page",
                    "sEmptyTable": "Aucune Hierarchie d'Antibiotique trouver!",
                    "sInfo": "Enregistrement(s) de _START_ à _END_ sur _TOTAL_"
                },
                "drawCallback": function(settings) {
                    if (null != id) {
                        $('.antibiotic_return').show();
                        $('.antibiotic_return').attr('data-id', id);

                        if (null != type) {
                            $('.antibiotic_return').attr('data-type', type);
                            $('.antibiotic_return').attr('data-parent', $('.antibiotic_return').data('parent'));
                        }
                    }
                }
            });
    };

    publics.show = function () {
        $('body').on('click', '.subcategory', function (event) {
            event.preventDefault();
            var id = $(this).data('id');
            var type = $(this).data('type');

            if  (null != type) {
                $('.antibiotic_return').attr('data-parent', id);
            }

            publics.bindInitData $this.DataTable().clear().destroy();table(id, type);
        });
    };

    publics.showParent = function () {
        $('body').on('click', '.antibiotic_return', function (event) {
            event.preventDefault();
            var id = $(this).data('id');
            var type = $(this).data('type');

            if (0 != id && 0 == type ) {
                privates.return(id);
                $('.antibiotic_return').hide();
            }
            else if (0 != id && null != type) {
                id = $(this).data('parent');
                $('.antibiotic_return').attr('data-parent',);
                $('.antibiotic_return').attr('data-type', id);
                $('.antibiotic_return').attr('data-id');
                privates.return(id, type);
                $('.antibiotic_return').hide();
            }
        });
    };

    privates.return = function (id = null, type = null) {
        var $this = $('#antibiotic_datatable');
        $this.DataTable().clear().destroy();

        if (null != id && null == type) {
            publics.bindInitDatatable();
        }
        else if (null != id && null != ty

pe) {
            publics.bindInitDatatable(id);
        }
    };

Mon Controller :

 /**
     * @Route("/ajaxGetListRefdata", options={"expose"=true}, name="antibiotic_ajaxGetListRefdata", methods="GET")
     *
     * @param Request $request
     * @param array   $sortings
     * @param array   $options
     *
     * @return Response
     */
    public function ajaxGetListRefdataAction(Request $request, array $sortings = [], array $options = []): Response
    {
        $sortings = $this->getSortings(
            $request,
            [
                'object.createdAt',
                'object.label',
                'object.type',
                'object.enabled',
            ]
        );

        if ($request->query->has('id')) {
            $options['id'] = $request->query->get('id');
        }
        if ($request->query->has('type')) {
            $options['type'] = $request->query->get('type');
        }

        return parent::ajaxGetListRefdataAction($request, $sortings, $options);
    }

Et voici le repository ou se trouve les requetes:

/**
     * @param array $options
     *
     * @return QueryBuilder|mixed
     */
    public function createQueryBuilderFindDataReference(array $options = [])
    {
        $queryBuilder = $this->createQueryBuilder('object')
                                ->andWhere('object.type = :grandParent');
        $params = [ 'grandParent' => AntibioticHierarchy::TYPE_CLASS ];

        if (array_key_exists('search', $options)) {
            $search = '%' . mb_strtolower($options['search']) . '%';
            $queryBuilder->andWhere(
                'LOWER(object.label) LIKE :search
                 OR LOWER(object.type) LIKE :search
                 '
            );

            $params['search'] = $search;
        }

        if (array_key_exists('id', $options)) {
            $queryBuilder->innerJoin('object.category', 'category')
                         ->andWhere(' category.id = :category_id');
            $params['category_id'] = $options['id'];
            $params['grandParent'] = AntibioticHierarchy::TYPE_SUBCLASS;

        }
        if (array_key_exists('type', $options) && "" !== $options['type']) {
            $params['grandParent'] = AntibioticHierarchy::TYPE_ANTIBIOTIC;
        }

        $queryBuilder->setParameters($params);

        return $queryBuilder;
    }

Si quelqu'un pouvais m'aider se serai vraiment sympa car ça fait des heures que je bloque.
Merci

2 réponses


CedLP
Auteur
Réponse acceptée

Salut, non je n'ai pas recopier de code et j'ai coder tous cela.
Sinon, au fait j'ai un tableau de donnée et sur chaque donnée y a un boutton détails, en clickant dessus, je recharge juste les données et non la page avec un lien différent, ce qui devrait être le cas.
Lorsque je veux faire des recherches, ma recherche ne marche pas car les nouvelles données qui sont dans la table après avoir été recharger ne sont pas garder en session vu que l'url ne change pas. Donc si j'actualise la page, les données que j'ai charger avec le boutton détails ne reste pas mais c'est les données de départ qui reste vu que l'url ne change pas mais que ce sont juste les données qui changent.
Donc ma recherche ne marche pas vu que c'est comme si les données qui sont là n'exister pas.
Merci pour l'erreurs.

J'ai résolus mon problème mais en faisant en sorte de recharcher la page avec de nouvelles données et un url différents au lieu de rester sur le même url et juste changer les données du tableau.

Bonjour.
Je ne comprends pas le rapport entre le titre du sujet et son contenu.
À moins que ce soit une erreur de re-copie de code, sinon tu as une erreur dans ton code JavaScript :

publics.bindInitData $this.DataTable().clear().destroy();table(id, type); // <-- ici