IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

jQuery.getJSON() chargement infini


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Par défaut jQuery.getJSON() chargement infini
    Bonjour,

    J'ai un problème avec des requêtes ajax ( jQuery.getJSON() )

    Situation :

    1) Mon programme commence par définir un objet JSON appelé moteur (construit en php)
    2) Je définit ensuite un classe Moteur.
    3) enfin j'initialise mon Moteur une foi que ma page html est chargée.

    Code :

    L'objet JSON 'moteur'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var moteur={"moteurs":[
      {"nom":"CToutVert","url":"CToutVert\/lat\/47.12\/long\/-2.1\/dist\/50\/debut\/1275861600\/fin\/1276034400"},
      {"nom":"CPasRouge","url":"cpasrouge\/ci\/14785\/geo\/44646546546464\/date\/14-06-2010,17-06-2010"},
      {"nom":"CPasRouge","url":"cpasrouge\/ci\/14785\/geo\/44646546546464\/date\/14-06-2010,17-06-2010"},
      {"nom":"momo","url":"momo"}]}
    Ma Classe 'Moteur'
    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
    function Moteur(moteur)
    {
        this.pros = [];
        this.moteur = moteur;
    };
    Moteur.prototype.init = function()
    {
            for(key in this.moteur.moteurs)
            {
                var unMoteur = this.moteur.moteurs[key];
                var url = unMoteur.url;
                alert("call : "+ url);
     
                jQuery.getJSON(  url, {'url':url}, function (data, textStatus) {
                    alert(this.url +'['+textStatus+']<br>'+ data);
                })
            }
        }
    };
    Instanciée et initialisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $(function(){
        if(moteur)
        {
            var mm = new Moteur(moteur);
            mm.init();
        }
    });

    Exécution :
    A l'exécution Mon Moteur mm est bien crée.
    L'appel à la fonction init charge bien le moteur JSON.
    La liste des moteurs et parcourue et les url sont bien appelées

    Problème :
    Dans ma console firebug je voie bien les différents appels en cours d'exécution. mais leur exécution ne se fini pas ...

    http://sites.google.com/site/mpimage...rgement-infini

    Alors que si j'appel ces url directement avec mon navigateur elle ma renvoie correctement leur résultats en json.


    Merci pour votre aide

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 16
    Par défaut
    Bonjour,

    Je ne vois pas de soucis du côté de la syntaxe javascript, pourrais-tu montrer le code de dev.php ?

    Ca pourrait me permettre de faire des test.

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour.

    J'ai repris le code en mettant le code JSON moteur dans le fichier moteur.js.

    Contenu du fichier moteur.js :
    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
     
    [
        {
            "nom":"CToutVert",
            "url":"CToutVert\/lat\/47.12\/long\/-2.1\/dist\/50\/debut\/1275861600\/fin\/1276034400"
        },
        {
            "nom":"CPasRouge",
            "url":"cpasrouge\/ci\/14785\/geo\/44646546546464\/date\/14-06-2010,17-06-2010"
        },
        {
            "nom":"CPasRouge",
            "url":"cpasrouge\/ci\/14785\/geo\/44646546546464\/date\/14-06-2010,17-06-2010"
        },
        {
            "nom":"momo",
            "url":"momo"
        }
    ]
    Ce qui simplifie le code :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<meta name="Author" content="Daniel Hagnoul" />
    	<title>Page type</title>
    	<style type="text/css">
    		body {
    			background-color:#696969;
    			color:#000000;
    			font-family:Arial, Helvetica, sans-serif;
    			font-size:medium;
    			font-style:normal;
    			font-weight:normal;
    			line-height:normal;
    			letter-spacing:normal;
    		}
    		h1,h2,h3,h4,h5 {
    			font-family:"Times New Roman", Times, serif;
    		}
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {
    			margin:0px;
    			padding:0px;
    		}
    		p {
    			padding:6px;
    		}
    		ul,ol,dl {
    			list-style:none;
    			padding-left:6px;
    			padding-top:6px;
    		}
    		li {
    			padding-bottom:6px;
    		}
    		div#conteneur {
    			width:95%;
    			margin:12px auto;
    			padding:6px;
    			background-color:#FFFFFF;
    			color:#000000;
    			border:1px solid #666666;
    			font-size:0.8em;
    		}
    	</style>
    	<script type="text/javascript" src="../lib/jquery-1.3.2.min.js"></script>
    	<script type="text/javascript">
     
    		function Moteur(moteur){
    			this.pros = [];
     
    			this.init(moteur);
    		}
     
    		Moteur.prototype.init = function(moteur){
    			for(key in moteur){				
    				var unMoteur = moteur[key][0];
    				var url = moteur[key][1];
     
    				$("#conteneur").append("<p>unMoteur = " + unMoteur + ", <br/>url = " + url + "</p>");
     
    				/*
    				$.getJSON( url, {'url':url}, function (data, textStatus){
    					alert(this.url +'['+textStatus+']<br>'+ data);
    				});
    				*/
    			}
    		}
     
    		$(document).ready(function(){
     
    			$.getJSON("moteur.js", function(json) {				
    				var moteur = [];
     
    				$.each(json, function(i,item){
    					moteur.push([item.nom, item.url]);
    				});
     
    				var mm = new Moteur(moteur);
    			});
    		});
     	</script>
    </head>
    <body>
    	<div id="conteneur"></div>
    </body>
    </html>

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  4. #4
    Membre éclairé Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Par défaut hé momo !
    Voici par exemple le code php du moteur momo :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
        function executeMomo()
        {
            $pros = array();
            $erreurs = array();
     
            $pro = array();
            $pro['nom'] = 'nom';
            $pro['description'] = 'description';
            $pro['image'] = 'image';
            $pro['produits'] = array();
     
            $produit = array();
            $produit['nom'] = 'nomProduit';
            $produit['disponibilites'] = array();
            $disponibilite = array();
            $disponibilite['prix'] = 10;
            $disponibilite['moteur'] = 'MoMo';
            $produit['disponibilites'][] = $disponibilite;
            $pro['produits'][] = $produit;
     
            $produit['disponibilites'][] = $disponibilite;
            $produit = array();
            $produit['nom'] = 'nomProduit2';
            $produit['disponibilites'] = array();
            $disponibilite = array();
            $disponibilite['prix'] = 15;
            $disponibilite['moteur'] = 'MoMo';
            $produit['disponibilites'][] = $disponibilite;
            $pro['produits'][] = $produit;
     
            $pros[] = $pro;
            $responce = array('pros'=>$pros,'erreurs'=>$erreurs);
            echo json_encode($responce);
     
            die();
        }
    C'est le moteur de test qui renvoie une réponse statique ....

    Coté php j'utilise Symfony 1.0
    donc la function executeMomo() est appelé par l'url moteur/momo
    Je précise les entête de sortie dans le fichier view.yml du module moteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    all:
      has_layout:   off #pour préciser qu il ne doit pas y avoir de template layout
      http_metas:
        content-type: text/json

    ....
    Je me demande si le die() ne renvoie pas un code erreur style "Processus terminé violemment.."

  5. #5
    Membre éclairé Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Par défaut Le problème viens du serveur ?
    ok je pense qu'il y avais un problème coté serveur.

    Le fait de faire un die empêche symfony de finir son travail et dont d'envoyer ses en-têtes.

    Maintenant mon code php renvoie bien du json.

    Détail des en-tête de la requête et de la réponse.

    Réponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Date   		Fri, 27 Nov 2009 13:47:50 GMT
    Server		Apache/2.2.12 (Ubuntu)
    X-Powered-By	PHP/5.2.10-2ubuntu6.3
    Expires		Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control	no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma		no-cache
    Content-Length	27
    Connection		close
    Content-Type	application/json; charset=utf-8
    Requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Host	localhost
    User-Agent	Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.5) Gecko/20091109 Ubuntu/9.10 (karmic) Firefox/3.5.5 GTB5
    Accept			application/json, text/javascript, */*
    Accept-Language		fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding		gzip,deflate
    Accept-Charset		ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive			300
    Connection			keep-alive
    X-Requested-With	XMLHttpRequest
    Referer			http://localhost/maplage-dev/trunk/public_html/dev.php/moteur/moteur
    Quand j'interroge directement un des moteurs dans mon navigateur, ce dernier me propose de télécharger le fichier json.

    Par contre ça ne marche toujours pas comme je le souhaite.
    J'ai maintenant 3 moteurs qui fonctionnent (dons momo) mais les deux derniers restes bloqué. Notament CToutVert qui est pour le moment le seul à être réellement implémenté. (Sa durée de traitement est de l'ordre des 5 secondes.)

  6. #6
    Membre éclairé Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Par défaut
    Le problème viens donc du moteur CToutVert.
    Quand je met tout autres sauf lui ça marche .

    Le moteur CToutVert renvoie lui aussi du json sauf qu'il va chercher ses données chez des partenaires via SOAP.

    Voici un détail des en-tête quand je l'appel depuis mon navigateur :

    en-tête Requête
    Host: localhost
    User-Agent: Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.5) Gecko/20091109 Ubuntu/9.10 (karmic) Firefox/3.5.5 GTB5
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Cookie: sfRemember=a889c831b63d1c9386ed9d21b1c942cc; maplage_admin=1a671adcf902dd77ac60b54b45755ec7; maplage=2aa8316b59a339b754e9072b14067780
    en-tête Reponse
    Date: Fri, 27 Nov 2009 14:20:33 GMT
    Server: Apache/2.2.12 (Ubuntu)
    X-Powered-By: PHP/5.2.10-2ubuntu6.3
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Connection: close
    Content-Type: application/json

    Et un extré de ma réponse
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    {
          pros: [
                {
                     nom: "CAMPING DES ABERS"
                      image: [
                           "http://www.foo.net/photos/2418/info/0/empl B.jpg"
                           "http://www.foo.net/photos/2418/info/0/empl F-J.jpg"
                           http://www.foo.net/photos/2418/info/0/DH000083.JPG
                           http://www.foo.net/photos/2418/info/0/2007_07_2.JPG
                           http://www.foo.net/photos/2418/info/0/IMG_1626.JPG
                      ]
                      produits: [
                            {
                                  disponibilites: [
                                        {
                                            + prix: null
                                        }
                                  ]
                            }
                      ]
                }
                {
                      nom: "L'Orée du Bois"
                      image: [
                           http://www.foo.net/photos/1833/info/0/1.jpg
                           http://www.foo.net/photos/1833/info/0/2.jpg
                           http://www.foo.net/photos/1833/info/0/3.jpg
                           http://www.foo.net/photos/1833/info/0/DSC00266.JPG
                           http://www.foo.net/photos/1833/info/0/DSC00317.JPG
                      ]
                      produits: [
                            {
                                  disponibilites: [
                                        {
                                             prix: "53"
                                        }
                                  ]
                            }
                      ]
                },
                {
                     nom: "F4N Euronat"
                     image: [ ]
                      produits: [
                            {
                                  disponibilites: [
     
                                        {
                                             prix: "194"
                                        }
                                  ]
                            }
                      ]
                }
          ]
        erreurs: [ ]
    }
    Une partie de mon code php aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ob_start();
    // Pleins d'opérations        
    $responce = array('pros'=>$pros,'erreurs'=>array());
    $this->json = json_encode($responce);
    $this->setTemplate('json');
    ob_end_clean();



    Quelques question plus spécifiques à JQuery :
    - lorsque je lance plusieurs requêtes ajax simultanés; est ce que un problème dans une des requêtes peut empêcher le fonctionnement des autres ?

Discussions similaires

  1. Excel bloque a l'ouverture (chargement infini)
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 32
    Dernier message: 18/04/2008, 07h59
  2. css chargement infini de la page sous Free
    Par Goldocrack dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 25/01/2008, 16h40
  3. file_get_contents temps de chargement infini
    Par Ne@tsoul dans le forum Langage
    Réponses: 5
    Dernier message: 18/07/2007, 16h33
  4. [AJAX] chargement infini de la page ..
    Par dada17 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/01/2007, 15h01
  5. [HTML] pb de chargement infini d'une page html
    Par jakouz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 17/11/2006, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo