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 :

[AJAX] est-ce que c'est bien et fiable


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut [AJAX] est-ce que c'est bien et fiable
    bonjours, ayant pas mal de lacune en pal mal de choses, j'essaie de les combler petit a petit.

    la, je suis en train delire un article sur ajax (tres bien fait, ma foi).

    et ca a l'air plutot enchanteur...

    l'heritier des frames ^^

    mais est-ce que c'est lourd a porter, et cela requiert il bcp de JS...

    ps : je me renseigne ausi car, pour mon BTS, je doit rendre une action sur l'evenementiel, et je me dit que ca pourrait etre pas mal de montrer ce genre de reactivité (notre prof a choisi le JS pour l'evenementiel)

    je savait pas ou poster : JS, ici, ou conception web, dsl si c po le bon fofo!

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Bonjour,

    Il faut plus ou moins de JS, tout dépend de la complexité du dynamisme et du nombre de navigateur cibles.

    J'ai fais un .js "basique" ( en récupérant des sources sur internet ) que voici :

    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    /*
     * ajax.js : script permettant d'employer la "Technologie AJAX"
     * Ce fichier est à inclure dans le HEAD de la page qui l'utilisera.
     *
     * Auteur : Jean Charbonneau ( avec divers et variés copié/collé )
     * Date : 28/06/2005
     *
     * Description :
     * AJAX est un nom barbare pour désigner une utilisation conjointe de plusieurs technos, qui sont :
     * Javascript, HTTP et DOM/XML. Javascript envoie une requête, et la page ayant fait cet appel reçoit de
     * manière asynchrone les résultats correspondants.
     *
     * Le but et de permettre par le biais de Javascript, et notamment de l'objet XMLHttpRequest, d'accèder à
     * une page distante sans reloader la page actuelle. Le contenu de la page distante est alors retourné à la
     * page initiale sous la forme d'un objet XML ou d'une chaine String, cette page pouvant donc
     * se servir pour raffraichir une zone texte, une liste, ou tout ce que l'imagination peut suggérer.
     * 
     * Limitation : il est impossible d'utiliser directement XMLHttpRequest pour obtenir le contenu
     *              d'une page se situant ailleurs que sur le même serveur. 
     *					 Pour contourner ce problème, il est possible d'utiliser une page "intermediaire"
     *					 qui irait chercher les données à distance, cette page se situant elle sur le même
     *					 serveur que le XMLHttpRequest.
     * 
     */
     
    // La variable contenant la requête
    var req;
     
     
    // Test pour le cas où il n'y a pas de DOMParser disponible ( IE )
    if (typeof DOMParser == "undefined") {
       DOMParser = function () {}
     
       DOMParser.prototype.parseFromString = function (str, contentType) {
          if (typeof ActiveXObject != "undefined") {
             var d = new ActiveXObject("MSXML.DomDocument");
             d.loadXML(str);
             return d;
          } else if (typeof XMLHttpRequest != "undefined") {
             var req = new XMLHttpRequest;
             req.open("GET", "data:" + (contentType || "application/xml") +
                             ";charset=utf-8," + encodeURIComponent(str), false);
             if (req.overrideMimeType) {
                req.overrideMimeType(contentType);
             }
             req.send(null);
             return req.responseXML;
          }
       }
    }
     
    var domParser = new DOMParser();
     
    // Dans le cas de mozilla (firefox) il est necessaire de définir ce privilège.
    try {
    	if(netscape != undefined)
    	  netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
    } catch(e) { };
     
     
    // Fonction de base, permettant l'accès au contenu de pages sur le même serveur.
    function loadDatas(url) 
    {
        // branch for native XMLHttpRequest object
        if (window.XMLHttpRequest) {
            req = new XMLHttpRequest();
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send(null);
        // branch for IE/Windows ActiveX version
        } else if (window.ActiveXObject) {
            req = new ActiveXObject("Microsoft.XMLHTTP");
            if (req) {
                req.onreadystatechange = processReqChange;
                req.open("GET", url, true);
                req.send();
            }
        }
    }
     
     
    // Fonction permettant l'accès au contenu de pages extérieures, même avec proxy; necessite le fichier ajax.php
    function loadDatasOutside(url,proxyserver,proxyport,proxyuser,proxypassword) 
    {
        // branch for native XMLHttpRequest object
        if (window.XMLHttpRequest) {
            req = new XMLHttpRequest();
            req.onreadystatechange = processReqChange;
            req.open("GET", "ajax.php?outsideurl=" + encodeURI(url) + "&proxyserver=" + proxyserver + "&proxyport=" + proxyport + "&proxyuser=" + proxyuser + "&proxypassword=" + proxypassword , true);
            req.send(null);
        // branch for IE/Windows ActiveX version
        } else if (window.ActiveXObject) {
            req = new ActiveXObject("Microsoft.XMLHTTP");
            if (req) {
                req.onreadystatechange = processReqChange;
                req.open("GET", "ajax.php?outsideurl=" + encodeURI(url) + "&proxyserver=" + proxyserver + "&proxyport=" + proxyport + "&proxyuser=" + proxyuser + "&proxypassword=" + proxypassword , true);
                req.send();
            }
        }
    }
     
     
    // Traitement asynchrone du résultat de la requête.
    function processReqChange() 
    {
        // only if req shows "complete"
        if (req.readyState == 4) {
            // only if "OK"
            if (req.status == 200) {
    				var xmltext = req.responseText;
    				var xmlobject = domParser.parseFromString(xmltext, "text/xml");
    				processDatas(xmlobject,xmltext); // fonction de la page appellante
            } else {
                alert("There was a problem retrieving the XML data:\n" + req.statusText);
            }
        }
    }
    En fonction de ça, sur la page appellante, tu peux faire quelque chose comme ceci :

    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
    <html>
    <head>
    <script language="JavaScript" src="js/ajax.js" type="text/javascript"></script>
    <script language="JavaScript">
     
    // fonction qui récupère les données sous deux formes : un objet XML et un objet Texte
    function processDatas(xmlObject,textString) {
    	// ici faire les traitements que vous souhaiter, pour l'exemple, j'ai juste rempli le div 'divAff'
    	document.getElementById('divAff').innerHTML = textString;
    }
     
    </script>
    </head>
    <body>
    <input type="button" name="page" value="Une page quelconque" onClick="loadDatas('unepage.htm');">
    <input type="button" name="Google" value="Google.fr" onClick="loadDatasOutside('http://www.google.fr','proxy-server','8080','','');">
    <table border="1">
    	<tr><td>Ici une page va s'afficher sans reload de la page !<br><div id="divAff"></div></td></tr>
    </table>
    </body>
    </html>
    Donc tu vois, la totalité de code est plutot faible, et la technologie "AJAX" est utilisée, ensuite, là je ne fais qu'un simple innerHTML : la complexité réside ensuite dans l'interpretation que tu fais de l'objet XML que tu reçois après ta requête : il faudrait surement le parser, et produire du HTML en Javascript à partir de celui-ci ! Ah moins que tu n'ai déjà reçu de l'HTML à la base
    K

  3. #3
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    plutot js pour le post je pense.

    Alors c'est un avis personnel mais je trouve ca tres bien.

    Ca te permet d'éviter certains rechargements de pages.
    Et aussi de faire des applis web qui ressemblent moins a du web

    Apres comme toutes bonnes choses faut pas en abuser.

    La manipulation se fait en js bien entendu mais ne pas oublier la partie serveur qui te renverra soit du text soit du xml
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  4. #4
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Alors, pour moi:
    ca permet de faire des choses très amusantes et réactives (cf Google Suggest ou Gmail par exemple).
    C'est assez lourd à mettre en place en JS (il faut bien avouer).

    Sinon, c'est très fiable et supporté par tous les principaux navigateurs.

    Donc à faire, mais uniquement dans des cas ou ça apporte vraiment un plus significatif par rapport à un rechargement de la page

    Perso, je l'ai utilisé pour un treeview en JavaScript, ça me permet de faire une page initiale legere, et d'augmenter l'arbre de façon réactive, alors que le transfert en un seul morceau de l'arbre aurait été sucidaire.

  5. #5
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    ezactement, c est comme quand tu veux faires des listes liées sans recharger ta page, si y a beaucoup de données tu es obligé d'embarquer 3000 tableaux js, de les parcourir, recréer tes select .....

    Avec ca au moins tu charge que ce dont tu as besoin au depart.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    En fait je pense que ça peut optimiser enormément la bande passante : tu peux ne transferer QUE les données dont tu as besoin à un instant T, imaginons une liste avec mise en forme complexe etc, ben avec "AJAX", tu factorises tout ça, sans reload, ça speed bien, après il est vrai que la machine client travaille plus : tant mieux, le serveur travaille moins

    Conclusion : que du benef
    K

  7. #7
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par KiLVaiDeN
    En fait je pense que ça peut optimiser enormément la bande passante : tu peux ne transferer QUE les données dont tu as besoin à un instant T
    Attention, ce point peut être assez illusoire. En effet, pour faire vraiment du Ajax, il faut envoyer ces données au format XML, qui est connu pour être très lourd.
    Ca permet d'économiser la bande passante dans la pluspart des cas, ça permet de créer une interface en XML à ton serveur, réutilisable eventuellement pour d'autres applications.

    Donc, à utiliser, mais il vaux mieux réflechir 5 minutes avant de se lancer dedans pour être sur que ce soit rentable

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    L'astuce, c'est que bien que tu utilises un objet XMLHttpRequest, tu n'es pas obligé d'avoir un fichier xml conforme !

    Si tu regardes mon code, et la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       var xmltext = req.responseText;
    Tu te rends compte qu'en fait tu peux passer n'importe quelle chose, tant que tu as une "response"

    Du coup, rien ne t'empêche d'imaginer une liste de valeurs au format CSV par exemple, que tu interpreterais en JS !

    Pleins de choses sont imaginables, c'est ça la chose qui m'a le plus frappé dans cette "technologie" : l'evolutivité et la créativité qui en est grandement accrue !

    N'empêche je suis un peu triste de ne pas avoir connu l'existence de l'objet XMLHttpRequest plus tot, car j'aurais fait des sites géniaux avec.... Je me rappelle de pleins de cas où ça aurait été excellent... dommage!
    K

  9. #9
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    oui alors la on va te dire que c est pas de l ajax car le x de ajax c est pour xml

    mais apres on s'en fout un peu de dire "je fais de l'ajax je suis un super codeur a la mode"

    l'essentiel est de trouver le bon compromis entre tes besoins et ce que la technologie peut t apporter
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  10. #10
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Citation Envoyé par siddh
    oui alors la on va te dire que c est pas de l ajax car le x de ajax c est pour xml

    mais apres on s'en fout un peu de dire "je fais de l'ajax je suis un super codeur a la mode"

    l'essentiel est de trouver le bon compromis entre tes besoins et ce que la technologie peut t apporter
    Hehe oui, tout à fait d'accord !
    Je vais donner un nom à ma technologie AJAX sans XML, ça va être la technologie MRPROPRE

    Citation Envoyé par moi
    "MRPROPRE économise encore plus la bande passante ! Résultat : votre carrelage est impéccable, c'est pas comme AJAX, qui lui laisse pleins de balises fermantes et ouvrantes inutiles après son passage !"
    K

  11. #11
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    et puis quand t'as pas besoin d'exporter une chaîne supérieure à la limite "GET", tu peux aussi te passer du xmlhttpmachin hein! juste avec une réécriture dynamique d'un script src qui pointe vers un .php, avec la chaîne de requête dans l'uri;

  12. #12
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par KiLVaiDeN
    L'astuce, c'est que bien que tu utilises un objet XMLHttpRequest, tu n'es pas obligé d'avoir un fichier xml conforme !
    Tout à fait d'accord avec toi. La solution la plus simple et la plus flexible est d'envoyer en retour une ligne de code JavaScript sur laquelle il n'y a plus qu'un eval() à faire.

    Mais dans ce cas, tu perds le format d'échange XML, qui permettrait de brancher d'autres applications sur le même service.

    Et si j'ai dit ça, c'est que tu parlais d'Ajax plutot qu'uniquement de XHR. Pour moi, Ajax, c'est justement l'utilisation de XHR avec du XML strict et bien formé.
    Enfin, c'est peut-être juste une question de termes

  13. #13
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    Si tu regardes mon code, et la ligne :

    Code:
    var xmltext = req.responseText;


    Tu te rends compte qu'en fait tu peux passer n'importe quelle chose, tant que tu as une "response"
    voila, mon truc a moi, c'est de savoir si on peut juste s'en tenir au minimum :

    1/ on envoie une requete
    2/ le serveur interprete
    3/ il renvoie une chaine pre-formatée
    4/ JS la place là ou il faut

    parceque l'idée de truc super performant et facil, j'en ai deja eu plein, a la fin, quand tu regarde, au lieu d'une caban, t'a une cathedrale...

    don je lit :
    Citation Envoyé par denisC
    C'est assez lourd à mettre en place en JS (il faut bien avouer).
    j'ai mal...

  14. #14
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par hansaplast
    j'ai mal...
    T'inquiete pas, au bout d'un moment, on s'habitue (à XHR et à avoir mal)

  15. #15
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    Citation Envoyé par denisC
    Et si j'ai dit ça, c'est que tu parlais d'Ajax plutot qu'uniquement de XHR. Pour moi, Ajax, c'est justement l'utilisation de XHR avec du XML strict et bien formé.
    Enfin, c'est peut-être juste une question de termes
    Tu as raison, comme je le disais le x de Ajax c est pour xml, apres c est plus de l'Ajax mais l'utilisation du XHR.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/10/2011, 00h38
  2. est-ce que python est ce que je cherche
    Par SILICONE dans le forum Général Python
    Réponses: 5
    Dernier message: 21/12/2007, 14h23
  3. [frame]est ce que s'est bien fait ?
    Par paterson dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/08/2006, 17h37
  4. [Hibernate] Est ce que j'ai bien compris?
    Par questionneuse dans le forum Hibernate
    Réponses: 17
    Dernier message: 07/01/2006, 16h38
  5. [Système] Est ce que je fais bien
    Par hisy dans le forum Langage
    Réponses: 1
    Dernier message: 13/12/2005, 10h20

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