Bonjour,

je rencontre un soucis dans mon dernier projet symfony. Je dois créer un filtrage dynamique des données sur une page de vente de voitures d'occasion.

J'essaie d'utiliser ajax mais je ne parvient pas a obtenir le rendu souhaité, je me retrouve toujours avec ce message d'erreur :

TypeError: Cannot read properties of undefined (reading 'content')

Je parviens a récuperer l'url des données modifier et quand je dump mon résultat j'ai bien les données filtrées, mais impossible de les afficher.

Voila mon code :

scripts-cars.js

//   traitement ajax des données
const FiltersForm = document.querySelector("#filters");

//   on crée une boucle sur les input
document.querySelectorAll("#filters input").forEach((input) => {
  input.addEventListener("change", () => {
    // on intercepte les clics
    // on recupere les données du formulaire
    const form = new FormData(FiltersForm);

    //   on fabrique la queryString
    const Params = new URLSearchParams();

    form.forEach((value, key) => {
      Params.append(key, value);
    });

    //   on recupere l'url active
    const url = new URL(window.location.href);

    //   on lance la requete ajax
    fetch(url.pathname + "?" + Params.toString() + "&ajax=1", {
      headers: {
        "X-Requested-With": "XMLHttpRequest",
      },
    })
      .then((response) => {
        response.json();
      })
      .then((data) => {
        // on recupere la zone a modifier
        const content = document.querySelector("#cars-content");
        //   on remplace
        content.innerHTML = data.content;
      })
      .catch((e) => alert(e));
  });
});

2 réponses


Hello,

À priori la variable "data" dans le fetch est "undefined".

Est-ce que tu est sur de la réponse qu'envoie le backend au frontend ?
Il y a 2 choses qui me choquent :

  • pas de propriété "content";
  • un "renderView" avec un fichier twig;

Qaund tu fais ton fetch tu oublie de return la promesse du json

   .then((response) => {
        response.json();
     })

Au lieu de

   .then((response) => {
        return response.json();
     })