Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-11-2017 14:14:08

gabyto
Nouveau membre
Date d'inscription: 16-11-2017
Messages: 3

Echec de la reponse d'une requete Ajax Json

Bonjour mes amis,

Je suis un développeur mais nouveau en ZF3.
J'ai essayé d'utiliser ajax jquery pour afficher certaines données depuis mysql sans recharger ma page.
J'ai suivi tous les principes d'utilisation d'ajax jquery, mais je n'arrive a avoir la bonne reponse, j'ai eu toujours une réponse d'échec. Voici mon code ci-dessous. Je serais très heureux si quelqu'un pouvait m'aider.

Code:

[lang=php]
//In my Controller
public function remplirAction()
{
    $data = $this->entityManager->getRepository(Entite::class)->findAll();
    $request = $this->getRequest(); 
    $query = $request->getQuery(); 
    if ($request->isXmlHttpRequest()) { 
        $jsonData = array(); 
        $idx = 0; 
        foreach($data as $sampledata) { 
            $temp = array( 
                'id' => $sampledata->getId(), 
                'nom' => $sampledata->getNom(),
                'adresse' => $sampledata->getAdresse()
            );
            $jsonData[$idx++] = $temp; 
        } 
        $view = new JsonModel($jsonData); 
        $view->setTerminal(true); 
    } else { 
        $view = new ViewModel(); 
    }
    return $view; 
}

View: index.phtml

Code:

[lang=phtml]
<script language = "javascript"> 
    $(document).ready(function(){ 
        $("#loadbook").on("click", function(event){ 
            $.ajax({ 
                url: '/remplir', 
                type: 'POST', 
                dataType: 'json', 
                async: true, 

                success: function(data, status) { 
                    var e = $('<tr><th>ID</th><th>Nom</th><th>Adresse</th></tr>'); 
                    $('#book').html(''); 
                    $('#book').append(e); 

                    for(i = 0; i < data.length; i++) { 
                        book = data[i]; 
                        var e = $('<tr><td id = "id"></td><td id = "nom"></td><td id = "adresse"></td></tr>'); 
                        $('#id', e).html(book['id']); 
                        $('#nom', e).html(book['nom']); 
                        $('#adresse', e).html(book['adresse']); 
                        $('#book').append(e); 
                    }
                },
                error : function(xhr, textStatus, errorThrown) { 
                    alert('Ajax request failed.'); 
                }
            });
        });
    }); 
</script>

Hors ligne

 

#2 16-11-2017 15:12:22

Théocrite
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 603
Site web

Re: Echec de la reponse d'une requete Ajax Json

Salut !

Déjà, question de lisibilité, tu peux réécrire ton controlleur :

Code:

[lang=php]

//In my Controller
public function remplirAction()
{
    if ($request->isXmlHttpRequest()) {
        return new ViewModel();
    }

    $data = $this->entityManager->getRepository(Entite::class)->findAll();
    $request = $this->getRequest(); 
    $query = $request->getQuery();

    $jsonData = []; 
    $idx = 0; 
    foreach($data as $sampledata) { 
        $temp = [
            'id' => $sampledata->getId(), 
            'nom' => $sampledata->getNom(),
            'adresse' => $sampledata->getAdresse(),
        ];
        $jsonData[$idx++] = $temp; 
    } 
    $view = new JsonModel($jsonData); 
    $view->setTerminal(true); 

    return $view; 
}

Je suis par ailleurs étonné par le fait de renvoyer un view model vide quand c'est n'est pas une XML HTTP Request, mais pourquoi pas.

Pour le reste, il faut utiliser les developer tools de ton navigateur et regarder en console. Tu auras probablement des erreurs dans la partie networking et tu peux faire un console.log(errorThrown) au lieu de l'alert pour voir ce qu'il se passe.

Hors ligne

 

#3 16-11-2017 15:24:38

gabyto
Nouveau membre
Date d'inscription: 16-11-2017
Messages: 3

Re: Echec de la reponse d'une requete Ajax Json

Merci Théocrite de repondre  aussi rapide a ma requete,

Je vais essayer les modifications que vous me conseillez.

Merci encore,

Hors ligne

 

#4 16-11-2017 15:30:55

JGreco
Modérateur
Date d'inscription: 22-12-2012
Messages: 417

Re: Echec de la reponse d'une requete Ajax Json

Même étonnement pour moi, j'aurais fait ça, plus propre selon moi :

Code:

[lang=php]

//In my Controller
public function remplirAction()
{
    $request = $this->getRequest(); 

    if (! $request->isXmlHttpRequest()) {
        return $this->notFoundAction();
    }

    $data = $this->entityManager->getRepository(Entite::class)->findAll();

    $jsonData = [];
    $idx = 0; 
    foreach($data as $sampledata) { 
        $temp = [ 
            'id' => $sampledata->getId(), 
            'nom' => $sampledata->getNom(),
            'adresse' => $sampledata->getAdresse(),
        ];
        $jsonData[$idx++] = $temp; 
    }         
    $view = new JsonModel($jsonData); 
    $view->setTerminal(true);

    return $view; 
}

D'autre part si tu fais du MVC, ta logique devrait migrer dans un service ce qui rendra à ton contrôleur sa seule responsabilité de gérer la requête et la réponse.
Donc je ferais un truc dans ce style pour ton controleur :

Code:

[lang=php]
    $request = $this->getRequest();
    
    if (! $request->isXmlHttpRequest()) {
        return $this->notFoundAction();
    }

    $jsonData = $this->myService->getDatas(); // et ici tu migres toute ta logique de récupération de datas, c'est son service.
    $view = new JsonModel($jsonData); 
    $view->setTerminal(true);

    return $view;

Ta variable $query est aussi inutilisé dans l'exemple.

Enfin, via un console.log en front, via les web developper tools des navigateurs tu serais à même de comprendre tes erreurs


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#5 17-11-2017 14:57:09

gabyto
Nouveau membre
Date d'inscription: 16-11-2017
Messages: 3

Re: Echec de la reponse d'une requete Ajax Json

Bonjour mes amis,

Malqre la prise en compte de tous vos commentaires, mon probleme existe toujours.
en consequence, je me demande est-ce qu'il n'est pas possible pour que l'API isXmlHttpRequest n'est pas active ? parceque avant ca marchait normalement ? brusquement je vois que tout a ete plante. et jusqu'a present aucune solution n'est trouvee.

Donc, je vous demanderais de partager avec moi cette idee.

Merci d'avance,

Gabriel

Hors ligne

 

#6 17-11-2017 15:31:30

Théocrite
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 603
Site web

Re: Echec de la reponse d'une requete Ajax Json

Bonjour !

Il faudrait voir ce que te disent les developer tools de ton navigateur...

A quelle moment ça plante ? Quelle est la requête faite en ajax (au niveau network de tes outils de dev) ?

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages