Bonjour,

Je suis sous PHP 7.3 et symfony.

J'ai posté le même sujet dans la partie AJAX mais je pense que ça concerne également PHP donc je poste ici.

J'essaye de récupérer des informations de ma BDD grâce un input recherche. Dans cette input j'écris du texte et à chaque fois que je rentre une lettre, ma requête AJAX se réalise.

Voici mon code :

Entité 1 :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
 * @ORM\Entity(repositoryClass="App\Repository\TestUnRepository")
 */
class TestUn
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;
 
    /**
     * @ORM\Column(type="string", length=255)
     */
    private $nom;
 
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\TestDeux", inversedBy="un")
     */
    private $deux;

Entité 2 :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
 * @ORM\Entity(repositoryClass="App\Repository\TestDeuxRepository")
 */
class TestDeux
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;
 
    /**
     * @ORM\Column(type="integer")
     */
    private $numero;
 
    /**
     * @ORM\OneToMany(targetEntity="App\Entity\TestUn", mappedBy="deux")
     */
    private $un;

controleur :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class TestController extends AbstractController
{
    /**
     * @Route("/test/recherche", name="test_recherche")
     */
    public function index(EntityManagerInterface $em, Request $request)
    {
 
        $encoder = new JsonEncoder();
        $defaultContext = [
            AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object, $format, $context) {
                return $object->getNom();
            },
        ];
        $normalizer = new ObjectNormalizer(null, null, null, null, null, null, $defaultContext);
 
        $serializer = new Serializer([$normalizer], [$encoder]);
 
 
        $sortieRepository = $em->getRepository(TestUn::class);
 
        $param = [
            "site" => $request->get('site'),
            "nom" => $request->get('nom')
        ];
 
 
        $sorties = $sortieRepository->afficher($param);
 
        $serializer->serialize($sorties, 'json');
 
        return $this->json(
            [
                "sorties" => $serializer, //problème ici
                "param" => $param
            ]);
 
    }

JS/Ajax :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$('#nom2').on('keyup', function (e) {
 
    currentRequest = $.ajax({
        type: 'POST',
        url: '/test/recherche',
        data: {
            "site": null,
            "nom": $(this).val()
        },
        beforeSend: function () {
            if (currentRequest != null) {
                currentRequest.abort();
            }
        }
 
    }).done(function (data) {
        console.log(data);
        console.log(data['param']);
        console.log(JSON.parse(data['sorties']));
    });
});
Actuellement, j'ai testé, en écrivant des une input de type search :
- seul la dernière requête se réalise (si je tape 'bon', ça va me chercher 'bon' et non 'b' puis 'bo' puis 'bon') => ça fonctionne
- envoyer plusieurs données d'Ajax vers PHP => ça fonctionne
- envoyer un tableau de donnée en dire de PHP vers AJAX et le lire => ça fonctionne
- faire une requête DQL qui renvoie des données vers AJAX => Fonctionne pas >_<

Après moult recherche et réflexion, j'ai compris que lorsque mes infos venant de la BDD sont envoyés à AJAX en JSON, cela fait une référence circulaire. JSON traduit (Test1 besoin de Test2 qui a besoin de Test1 qui a besoin de Test2 et ainsi de suite).
J'ai compris que je dois faire une sérialisation (que j'ai essayé plus haut).
Mais ça ne fonctionne toujours pas, j'ai cette erreur qui apparaît :
Uncaught SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at Object.<anonymous> (home.js:68)
at c (jquery-3.4.1.min.js:2)
at Object.fireWith [as resolveWith] (jquery-3.4.1.min.js:2)
at l (jquery-3.4.1.min.js:2)
at XMLHttpRequest.<anonymous> (jquery-3.4.1.min.js:2)
Et même en faisant : console.log(data);.
Mon tableau est vide dedans, pourtant ma requête DQL fonctionne et me renvoie bien toutes mes données.

Et là, je bloque totalement. Si une âme charitable pouvait m'aider .

Bonne soirée.