Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-04-2012 01:17:12

geotb4
Nouveau membre
Date d'inscription: 02-04-2012
Messages: 3

Ajax (jQuery) : Layout qui s'affiche à l'infini dans la réponse !?

Bonjour à tous,

Pour un projet de développement je récupère, via un service web, un fichier xml contenant une liste de biens immobiliers. Je n'ai pas utilisé d'ajax dans un premier temps, j'ai récupéré le flux de données et implémenté la possibilité de filtrer/rechercher le contenu avec plusieurs formulaires (donc avec rechargement de la page).

Tout fonctionnait correctement mis à part le temps de récupération du fichier xml qui etait de l'ordre de 2-3 sec minimum. Donc pour éviter d'avoir des (grosses) lenteurs entre les pages et les recherches, j'ai modifié le code pour charger et traiter le xml en utilisant ajax. Donc en gros la réponse ajax est au format html et il n'y a plus qu'à l'afficher.

Introduction smile
J'ai trois controllers sur lesquels j'utilise ce type de traitement un pour les locations, un pour les achats et un pour les locations saisonnière.

Donc je déclare ça dans chaque init() :

Code:

$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('loadliste', 'html')        
        ->initContext();

Voilà le type de de requête Ajax que j'utilise :

Code:

$(document).ready(function() {
    $('#waiting').fadeIn('fast');
    $('#liste_annonce').css("display", "none");
    $('#liste_annonce').load('./acheter/loadliste/format/html', function() {$('#liste_annonce').fadeIn('fast');});
    $("#achat_filtre").submit( function() {
    $('#liste_annonce').fadeOut('fast', function() {$('#waiting').fadeIn('fast');});
    $('#liste_annonce').load('./acheter/loadliste/format/html', 'ville='+$('#ville_achat_filtre').val()+'&cp='+$('#cp_achat_filtre').val()+'&reference='+$('#reference_achat_filtre').val()+'&type_bien='+$('#type_bien_achat_filtre').val()+'&nbpieces='+$('#nb_piece_achat_filtre').val()+'&surface='+$('#surface_achat_filtre').val()+'&budget='+$('#budget_achat_filtre').val(), function() {$('#liste_annonce').fadeIn('fast');});                    
    return false;    
    });
});

Et le traitement de l'action loadliste :

Code:

public function loadlisteAction()
{
    //Désactivation du layout
    $this->_helper->layout->disableLayout();
        
    //Je récupère les paramètres de la requête ajax et je les vérifie et les mets en session        
    ...            
                
    //Je paramètre l'url de mon service web pour récupérer le xml
    ...            
    
    //Je traite le xml        
                 ...

    //Si il y a des résultats je les donne au paginateur
    ...

                //Je créé une variable data au format html et je l'envoie à ma vue
                ...
     $this->view->data = $data;
    }

Chacun de ces controleurs affiche un formulaire (pour filtrer) que j'appel via une aide d'action et tout ça fonctionne très bien.

Le problème commence ici
Seulement voilà, afin de rendre la recherche accessible sur toutes les pages, j'ai plusieurs formulaires sur mon layout qui font la même chose que ceux sur chacune des actions; je les appel également avec une aide d'action directement dans le layout.

Quand je les utilise, je mets simplement les paramètre entrés dans le formulaire en session et je redirige vers la page correcpondante. Sauf qu'une fois la redirection effectuée, la requete ajax ne se fait pas correctement(ou pas du tout) et j'ai l'impression qu'il veut afficher le layout dans ce qui devrait être la réponse ajax mais en boucle... quand je regarde avec firebug il insère ça à l'infini :

Code:

    
jquery....min.js (ligne 1)GET http://localhost/Monroy/js/changeOnglet.js?_=1333408104446
200 OK 987ms    
jquery....min.js (ligne 1)GET http://localhost/Monroy/js/jquery-1.7.1.min.js?_=1333408105437
200 OK 19ms    
jquery....min.js (ligne 1)GET http://localhost/Monroy/js/loadQui.js?_=1333408105584
200 OK 21ms    
jquery....min.js (ligne 1)GET http://localhost/Monroy/js/changeOnglet.js?_=1333408105612
200 OK 14ms    
jquery....min.js (ligne 1)GET http://localhost/Monroy/js/jquery-1.7.1.min.js?_=1333408105630
200 OK    10ms    
jquery....min.js (ligne 1)GET http://localhost/Monroy/js/calendrier.js?_=1333408105736
200 OK    11ms    
jquery....min.js (ligne 1)GET http://localhost/Monroy/js/loadQui.js?_=1333408105754
200 OK    4ms    
jquery....min.js (ligne 1)GET http://localhost/Monroy/js/changeOnglet.js?_=1333408105768
200 OK        13ms    
jquery....min.js (ligne 1)GET http://localhost/Monroy/js/jquery-1.7.1.min.js?_=1333408105786
200 OK    5ms    
jquery....min.js (ligne 1)GET http://localhost/Monroy/saisonnier/index/saisonnier/loadliste/format/html
200 OK    227ms

puis pareil mais (ligne2), puis (ligne 3), puis...

Bon voilà j'espère que ça inspirera quelqu'un, parce que ça fait 5h que je cherche, ... et je tourne moi même en boucle à l'infini wink

Hors ligne

 

#2 03-04-2012 13:44:48

geotb4
Nouveau membre
Date d'inscription: 02-04-2012
Messages: 3

Re: Ajax (jQuery) : Layout qui s'affiche à l'infini dans la réponse !?

Petite mise à jour

Après quelques test rapides, quand j'utilise une redirection vers un des contrôler qui possède une connection en ajax (depuis n'importe quelle action) le même problème se répète.

Code:

$this->_redirect('/saisonnier/index/');

Je creuse un peu plus smile

Vous savez comment Zend gère une redirection ?

Hors ligne

 

#3 03-04-2012 19:57:36

geotb4
Nouveau membre
Date d'inscription: 02-04-2012
Messages: 3

Re: Ajax (jQuery) : Layout qui s'affiche à l'infini dans la réponse !?

Bon me revoilà avec une solution qui résoud le problème mais qui ne le corrige pas...

En attendant de trouver le souci qui se produit lors de la redirection php, je fais une redirection en javascript et ça fonctionne...

Code:

<?php
]$urlacheter = $this->url(array('controller' => 'acheter',  
                              'action' => 'index',  
                              ), null, null); 
?>

<script type="text/javascript">
$("#achat").submit( function() {                
    window.location = "<?php echo $urlacheter;?>";
    return false;
});
</script>

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