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

JavaScript Discussion :

SQL dans Javascript


Sujet :

JavaScript

  1. #21
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oModel.loadData("datacontacts.php",null,true); // charge les données en synchrone


    Si on en croit https://openui5.hana.ondemand.com/#d...JSONModel.html le paramètre true indique que la requête est bien asynchrone et qu'il est donc nécessaire soit de modifier ce paramètre, soit d'attendre la réponse pour traiter les données reçues, comme indiqué dans mon précédent lien.

    lysandro.
    J'espère que tu ne te méprends pas sur mes remarques, il ne s'agit pas de dénigrer ce que tu fais, juste de faire remarquer que ce n'est pas la façon "standard" d'effectuer une requête AJAX. Mais ton aide est tout à fait appréciée.
    Pour ce qui est des tests en local, à partir du moment où un appel se fait généralement sur un serveur (pour appeler un script serveur type PHP), la présence d'un serveur local semble habituellement implicite.

  2. #22
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Si on en croit https://openui5.hana.ondemand.com/#d...JSONModel.html le paramètre true indique que la requête est bien asynchrone
    Tu me crois si je te dis que je suis allé lire la doc, et que j'ai fais attention à ce que la requête soit synchrone pour éviter les problèmes (d'où le commentaire !) ... Quel c..! , vais aller me coucher ... Bien vu en attendant !

  3. #23
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Points : 34
    Points
    34
    Par défaut
    En effet si je passe le parramètre à true le alert(oModel.getJSON()); m'affiche les données elles sont donc bien récupérés. Par contre elles ne sont toujours pas dans mon tableau ^^

  4. #24
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Comme l'a fait remarquer Bovino, je me suis trompé, le paramètre doit-être à 'false' pour avoir une requête synchrone (qui attend les données).
    Il faut essayer avec le moins de code possible et tester

  5. #25
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Points : 34
    Points
    34
    Par défaut
    Je ne comprend pas trop ce système "synchrone" "asynchrone" ... Et surtout pourquoi lorsque je suis en asynchrone le alert(oModel.getJSON()); me revoie bien les données alors qu'en synchrone non ?

  6. #26
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    synchrone: lors d'une requête synchrone, tu récupères la main dans ton code quand la réponse est reçue. Donc, tu bloques le déroulement du programme.
    asynchrone: la requête est envoyée, tu récupères la main tout de suite mais la réponse n'est pas forcémment reçue. Donc, il faut enregistrer ce qu'on appelle un 'callback' qui est déclenché par le processus de requête/réponse quand il a reçu les données.

    Les méthodes pour enregistrer les 'callback's sont définis dans https://openui5.hana.ondemand.com/do...del.Model.html, dont hérite sap.ui.model.JSONModel : attachRequestCompleted, attachRequestFailed, ... N'ayant fait aucun test, je ne sais pas ni comment, ni s'il faut les utiliser. Dans ma petite tête, vu la forme du framework, j'avais l'impression que c'était géré par les composants eux mêmes, mais c'est peut-être une grossière erreur.

    Pour ta question: pourquoi ça marche en asynchrone et pas en synchrone, aucune idée ...

  7. #27
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Bon, j'ai fais un test (en local :/ - Firefox: 31, OpenUI5: 1.24.5), je te mets le code utilisé (le tien à peu de choses)
    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
    <!DOCTYPE html>  
    <html><head>  
        <meta name="description" content="UI5 table example with local JSON model" />
        <meta http-equiv='X-UA-Compatible' content='IE=edge' />
        <meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/>  
     
        <script id="sap-ui-bootstrap" src="scripts/resources/sap-ui-core.js"
                data-sap-ui-theme="sap_bluecrystal"
                data-sap-ui-libs="sap.ui.commons,sap.ui.table"></script> 
     
     
     
    <script>  
            // create the DataTable control
            var oTable = new sap.ui.table.Table({editable:false});
            // define the Table columns
            var oControl = new sap.ui.commons.TextView({text:"{nom_contact}"}); // short binding notation
            oTable.addColumn(new sap.ui.table.Column({label: new sap.ui.commons.Label({text: "Nom"}), template: oControl, sortProperty: "nom_contact", filterProperty: "nom_contact", width: "100px"}));
            oControl = new sap.ui.commons.TextView({text:"{prenom_contact}"}); // more verbose binding notationt
            oTable.addColumn(new sap.ui.table.Column({label: new sap.ui.commons.Label({text: "Prénom"}), template: oControl, sortProperty: "prenom_contact", filterProperty: "prenom_contact", width: "100px"}));
     
            // create a JSONModel, fill in the data and bind the Table to this model
            var oModel = new sap.ui.model.json.JSONModel();
            oModel.loadData("datacontacts.php");
     
            oTable.setModel(oModel);
            oTable.bindRows("/modelData");
     
            // finally place the Table into the UI
            oTable.placeAt("contacts");
    </script>
    </head>
    <body class='sapUiBody'>
        <div id='contacts'></div>
    </body>
    </html>
    Le script de sap.ui n'est pas chargé à partir du même emplacement mais cela n'a aucun impact, juste mon installation est différente.

    J'ai rajouté le 'oModel.loadData', et j'ai créé un fichier local appellé 'datacontacts.php' dont le contenu est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {"modelData": [
        {"nom_contact": "Doe", "prenom_contact": "John"},
        {"nom_contact": "Doe", "prenom_contact": "Jane"}
    ]}
    Comme en plus je ne connais pas JSON, j'ai un peu tatonné mais bref, résultat j'ai un tableau avec des lignes contenant les valeurs du fichier 'datacontacts.php'.
    Au vu des données, je pense qu'il ne te manquait en fait que la racine 'modelData' que tu lies dans 'bindRows'.

    A partir de là, si ca fonctionne aussi chez toi, tu pourras essayer de revenir à ton écriture initiale, i.e. sans le 'loadData' pour voir.

  8. #28
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Points : 34
    Points
    34
    Par défaut
    Merci lysandro grâce à ton exemple j'ai réussi à faire marcher mon cas.

    En visualisant ta page "datacontacts.php" j'ai remarqué qu'elle renvoyait les data au format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"Data": [ {"nom_contact": "Doe", "prenom_contact": "John"}, {"nom_contact": "Doe", "prenom_contact": "Jane"} ]}
    Or ma page "datacontacts.php" renvoyait avec le json_encode($aData); des données de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"nom_contact": "Doe", "prenom_contact": "John"}, {"nom_contact": "Doe", "prenom_contact": "Jane"} ]
    J'ai donc du ajouté dans le écho du json_encode($aData) la chaîne {"Data": et mettre à la fin }
    Mon renvoie de données dans datacontacts.php devient donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '{"aData":'.json_encode($aData).'}';
    Je vous remercie grandement de votre aide je vais pouvoir avancer maintenant que j'ai un template qui marche

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Requêtes SQL dans du JavaScript
    Par Niki59 dans le forum Langage
    Réponses: 5
    Dernier message: 02/11/2008, 16h03
  2. [PHP-JS] Requête PHP vers SQL dans un script JavaScript
    Par AngelFire dans le forum Langage
    Réponses: 6
    Dernier message: 08/03/2008, 11h13
  3. Requete Sql Dans Variables Javascript
    Par stelsej dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 10/04/2007, 09h57
  4. requete sql dans fonction javascript
    Par griese dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/06/2006, 09h44
  5. [newbie]une requete sql dans javascript
    Par megapacman dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/06/2006, 15h59

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