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

Ext JS / Sencha Discussion :

Store.load, callback et success=false


Sujet :

Ext JS / Sencha

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut Store.load, callback et success=false
    Salut à tous,

    j'ai un problème avec le retour de mon store.load lorsque dans mon json, le success = false.
    le callback n'est pas exécuté.

    Par contre si mon success=true tout se passe très bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ext.data.JsonP.callback1({"success":true,"total":29,"totalMaxScore":15.9694,"rows":[{"fs":"DO......"}]});
    Si mon success=false alors je ne rentre même pas dans ma fonction callback, le console.log() ne s'affiche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ext.data.JsonP.callback15({"success":false,"total":0,"totalMaxScore":1,"rows":[]});
    Voici mon store.load

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                myInfGrid.getStore().load({
                    scope: this,
                    params: { 
     
                    },                
                    callback: function(records, operation, success) {
     
                      console.log('inside callback');
     
                    }
                });
    Merci pour votre aide,

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Alors après avoir fait quelques essais, je m'aperçois que même si mon success est true mais que le rows est vide alors je ne rentre pas dans le callback

    je continue mon investigation.....

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Bon il semble que si je veux entrer dans mon callback il faut 2 choses:

    1. que mon success soit à true
    2. que mon rows ait au moins un enregistrement

    Cela n'a pas de sens ?!! à quoi sert le success alors ??!!

    ou alors mon JSON est erroné et le false ne s'écrit pas de cette manière.

    J'ai essayé: false avec des rows, false sans des enr. dans rows, ... un peu toute les combinaisons et seul
    true + enregistrement entre dans le callback ?!

    une idée ? j'ai loupé quelque chose ??

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    bon du nouveau mais toujours pas de gestion du success = false ok.

    Si dans la définition de mon Store, j'ajoute un listener de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    listeners : {
                    exception : function(proxy, response, operation) {
                        //exception handling
                        alert('exception');
                    }
                }
    Lorsque success=false, j'ai bien l'alert qui s'affiche, et si c'est success=true, l'alert ne s'affiche pas...

    Le problème c'est que ce listener est dans ma déclaration de mon proxy et non pas dans le mon .load

    comment faire pour lui dire de gérer ça dans mon callback ? là je sèche.... please une idée !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Pour info, voici mon store pour mon infinite grid:

    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
    Ext.define('PP.store.InfPs', {
        extend      : 'Ext.data.Store',
        model       : 'PP.model.InfP',
        autoLoad    : false,
        storeId     : 'storeIdInfP',
     
        remoteSort  : true,
        // allow the grid to interact with the paging scroller by buffering
        buffered    : true,
     
        leadingBufferZone   : 10, // The number of records to keep rendered below the visible area.
        trailingBufferZone  : 10, // The number of records to keep rendered above the visible area.
        numFromEdge         : 5,  // How close the edge of the table should come to the visible area before the table is refreshed further down.
     
        pageSize            : 25,
        purgePageCount      : 0,    
     
        proxy: {
            type        : 'jsonp',
            limitParam  : 'rows',
            pageParam   : 'start',
     
            reader: {
                totalProperty   : 'total', // si omit alors totalProperty prend aussi la valeur "total"
    ...
                messageProperty : 'message',
                successProperty : 'success',
                root            : 'rows'
            },
            listeners : {
                    exception : function(proxy, response, operation) {
                        //exception handling
                        alert('Error in InfP');
                    }
            },        
            // sends single sort as multi parameter
            simpleSortMode      : true
        },
        sorters: [{
            property : 'pd',
            direction: 'DESC'
        }]
     
     });

  6. #6
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    effectivement il semble qu'il y ait une grosse confusion.

    JSONP ne fonctionne pas comme JSON
    la réponse attendue n'est pas du tout la même.

    pour gérer une réponse du type{"success":false,"total":0,"totalMaxScore":1,"rows":[]}il faut utiliser un proxy AJAX avec un reader JSON et non un proxy JSONP
    JSONP attend une réponse genresomeCallback({users: [{id: 1,name: "Ed Spencer",email: "ed@sencha.com"}]}); il n'y a pas de success géré dans JSONP
    Le serveur dois constituer une réponse conforme et s'il n'y parvient pas il doit généré une erreur http
    qui sera captée par le gestionnaire d'exception du proxy

    A+JYT

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Bonjour Seikajin !

    ah ben voilà tout s'explique alors...

    du coup le success=false des paramètres effectivement n'a rien à voir avec mon success dans ma réponse json...

    merci pour cet éclaircissement !

    Amicalement,
    Bruno

  8. #8
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Je n'ai pas ce qu'il faut sous la main
    mais j'ai un proxy dérivé de ajax que j'utilise avec un reader de type json
    dans e quel j'ai ajouté ce qu'il faut pour intercepter les messages d'erreur (ou de success)

    Je repasse par mon bureau demain après midi.
    je vais essayer de penser à poster cette solution.

    A+JYT

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Effectivement si tu as ça, ça serait vraiment bien.

    Juste un petit détail, pourquoi si mon rows est vide, cela provoque une exception? vide ne veut pas dire obligatoirement erreur non ?
    Pour moi une erreur serait un problème de connexion ou bien la page renvoie un mauvais json, ou bien la page n'existe pas, etc...

    rows:[], génère une exception...

  10. #10
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    j'ai comme l'impression que tu as une config de ton store pas cohérente
    de ce que j'ai vu tu reproduis à la main ce que fait un JsonPStore c'st à dire un datastore configuré avec un proxy JsonP et un reader Json
    Citation Envoyé par sencha
    A JsonPStore will be automatically configured with a Ext.data.reader.Json and a JsonPProxy
    normalement si le tableau est vide ça ne fait rien.
    A+JYT

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Voici ce que j'ai dans mon fichier PHP qui renvoie les données:

    $data contient en fait les différents enregistrements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $arrResponse = array("success"=>true,
                        "total"=>$nfamily,
                        "message"=>$mess,
                        "rows"=>$data);
    die($callback . '(' . json_encode($arrResponse) . ');');
    Si je comprends bien ce que tu me dis, il ne faudrait renvoyer que $data ?

    mais alors comment renvoyer le total et autres informations ?

    en tout cas merci pour ton aide.

  12. #12
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    comme promis mais avec retard voici donc mon proxy et son utilisation
    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
    Ext.define('OlympeWeb.model.Proxy', {
        extend: 'Ext.data.proxy.Ajax',
        alias: 'proxy.json',
        listeners: {
            exception: function (proxy, exchange, operation, eOpts) {
                if ((200 == exchange.status)||(401 == exchange.status)) {
                    try {
                        var response = JSON.parse(exchange.responseText);
                        OlympeWeb.notif('Lecture des données', response.error.message);
                    } catch (e) {
                        OlympeWeb.msg('Lecture des données', exchange.responseText);
                    }
                } else if (404 == exchange.status) {
                    OlympeWeb.msg('Lecture des données', exchange.responseText);
                }    
            }
        }
    });
    OlympeWeb est un petit code pour faire des notif ou des messages dans mon application.
    un modèle qui utilise le proxy
    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
    Ext.define('Gestion.model.CodeLieu', {
        extend : 'Ext.data.Model',
        fields : [ {
            name : 'DIVISION',
            type : 'string'
        }, {
            name : 'MAGASIN',
            type : 'string'
        }, {
            name : 'CODE_LIEU',
            type : 'string'
        } ],
     
        proxy : {
            type : 'json',
            api : {
                read : 'gestion/codelieu.json',
                update : 'gestion/codelieu.json'
            },
            reader : {
                type : 'json',
                root : 'codelieu',
                totalProperty : 'total',
                successProperty : 'success'
            }
        }
    });
    et le store qui vas avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Ext.define('Gestion.store.CodeLieu', {
        extend : 'Ext.data.Store',
        model : 'Gestion.model.CodeLieu',
        remoteSort : true,
        pageSize : 100,
        autoLoad : false
    });
    A+JYT

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Bonjour Sekaijin,

    Merci pour ton code, je vais m'y inspirer pour les miens !

    Bon WE.

Discussions similaires

  1. Treegrid, Store : Récupérer le totalProperty dans le callback ?
    Par Bruno13 dans le forum Ext JS / Sencha
    Réponses: 2
    Dernier message: 01/04/2014, 22h25
  2. [AJAX] synchronicité et callback (success) en mode async
    Par InfoGeo dans le forum jQuery
    Réponses: 22
    Dernier message: 04/12/2012, 09h49
  3. [ExtJs 4 Sencha Architect] Différence entre autoload et load d'un store
    Par Jeune_Developpeur dans le forum Ext JS / Sencha
    Réponses: 0
    Dernier message: 05/11/2012, 17h40
  4. load instance d'un model depuis store
    Par blacksf dans le forum Ext JS / Sencha
    Réponses: 1
    Dernier message: 17/10/2012, 07h27
  5. ERROR 1314 (0A000): LOAD DATA is not allowed in stored proce
    Par pointe dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 17/11/2005, 12h50

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