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

AJAX Discussion :

[AJAX] utiliser le retour d'une page php classique


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Par défaut [AJAX] utiliser le retour d'une page php classique
    Bonjour,

    Je n'avais encore jamais utilisé AJAX. Jamais eu le temps de m'y intéresser.
    C'est fait. Je viens d'essayer, via jQuery.

    Je poste les données d'un formulaire. Ok.
    Je reçois la réponse (tout est beau dans firebug). Ok.

    Mais cette réponse est prévue pour utilisation non AJAX, c-a-d que le php de validation renvoie une page html complète (oui, ok, j'ai compris, il faudra que je structure autrement désormais ).

    Ca me semble être un cas des plus ordinaires, mais je n'ai pas trouvé de solution sur le net (pas du trouver les bons mots-clés) :
    La réponse du serveur est une page complète (du doctype au </html>). Comme faire rafraichir cette page (j'ai essayé document.innerHTML mais ça ne fonctionne pas) ou, plus simplement, la ou les div (dont je connais les noms) qui ont été modifiées ?

    Si utile, serait-il possible de créer un nouvel objet jQuery avec les données reçues ?

    J'ai pensé à filtrer côté serveur (si c'est du xhr, ne renvoie que le bout d'html qui change), mais le site n'étant pas conçu pour ça, il faudrait mettre des conditions partout.

    Merci !

  2. #2
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Salut,

    L'idéal c'est de renvoyer du server les données concernées pour ensuite les injecter dans ta page côté client. Cela recoupe ton idée:
    Si utile, serait-il possible de créer un nouvel objet jQuery avec les données reçues ?
    Côté server, tu peux fabriquer et renvoyer un objet JSON pour te faciliter la vie ensuite en javascript sur le client.

    ERE

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Par défaut
    Je suis bien d'accord avec toi, mais le but est de pouvoir mettre un soupçon d'AJAX dans un site qui n'était pas prévu pour ça.

    Donc mon problème (qui pourrait se poser dans un autre contexte, donc la réponse m'intéresse dans tous les cas), c'est d'arriver à filtrer la page complète que je reçois. Est-ce que je peux en faire quelque chose (sans devoir faire appel une regex) ?

  4. #4
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Désolé de te le dire, mais il semble que tu multiplie les erreurs de conception...

    1) Tu utilises Ajax pour générer une page complète (même si j'ai bien lu tes arguments !) et la modifier coté client.
    C'est une erreur dans la mesure où :
    * Ce que tu récupères n'est pas du code HTML mais du texte, contrairement à ce qui est affiché lorsque tu appelles une page PHP directement.
    * Il est plus cohérent de modifier le code coté serveur que coté client.

    2) Tu ne veux pas utiliser de regexp () alors que, si tu ne prends pas en compte ma première remarque, c'est le moyen le plus efficace (même si ça rique de rester compliqué d'après ce que tu nous dis...)

    Donc dernière remarque, qu'est-ce qui t'empêche de créer un nouveau script PHP qui sera appelé par Ajax et qui ne renverra que ce dont tu as besoin ???
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Par défaut
    Des erreurs de conception, il y a en sûrement, mais n'oublie pas que je pars de qq chose de fini (depuis un moment) et que j'y reviens juste pour mettre un peu d'AJAX.

    Je récupère du texte, ok. Mais tout comme on injecte du texte (qui peut contenir du html) dans un div par exemple, je ne vois pas ce qui pourrait empêcher d'injecter du html dans <html>, tout simplement (bref, tout ce que je reçois sauf le doctype).

    Je m'étais dit qu'en utilisant une sortie classique, accessible et en la filtrant ensuite, j'étais sûr de rester en "progressive enhancement".
    Il est évident que maintenant je concevrais différemment mes sites, que je veuille de l'AJAX ou pas, au cas où.

    Pour la regexp, c'est pas que je n'en veux pas (et elle n'est pas bien complexe en plus), mais j'espérais qq chose de plus... natif.

    Concernant le traitement côté serveur, et si l'on souhaite pouvoir fonctionner avec et sans JS, ça impose de bosser en MVC (ce que je n'ai jamais fait et me semble démesuré pour de petits sites) ou pas ?

  6. #6
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Re-salut,

    Si ta latitude est si restreinte, et même si je pense que ce n'est pas une bonne approche (car trop bancal) de faire de l'AJAX sur des fondations pas très solides, une solution pourrait consister à "buffériser" ta sortie sur le server (je ne sais pas en quel langage tu travailles sur le server, mais tous le permettent) pour obtenir finalement une chaine de caractères que tu pourrais passer dans une regexp pour en extraire ce qui t'intéresse. Ensuite tu construis une structure JSON que tu renvoies vers ton client web pour l'utiliser sous la forme d'un objet Javascript. Cela aurait l'avantage de l'évolutivité le jour où tu peux revoir cette partie de code AJAX sur le server pour effectuer le traitement qui renverra alors directement la structure JSON sans passer par la phase intermédiaire du code HTML.

    ERE

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Par défaut
    C'est une bonne méthode (dans cette situation bancale du moins, comme tu dis), en effet. Mais comme c'est gzipé par apache (à la racine, pas déclaré en php), je ne sais pas si ça peut fonctionner.

    Ce que je ne comprends pas (du coup, j'arrête, ça m'a épuisé), c'est qu'il m'a été impossible d'appliquer une regexp côté client !
    Je l'ai pourtant testé sur un page fixe et elle fonctionne. J'ai réduit à une expression des plus simples mais ça ne fonctionne jamais.
    J'ai utilisé les fonctions de jQuery, pour utiliser un peu tout (success, complete, dataFilter, etc.) mais, si la réponse du serveur est toujours ok, ça ne fonctionne pas.

    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
    $.ajax({
        				   type: "POST",
        				   //dataType: "json",
        				   url: "test.php",
        				   //cache: false,
        				   dataType: "html", // essayé aussi "text"
        				   data: mydata,
        				   complete: function(data) {
     
                   },
        				   error: function(msg){ alert( "Error !: " + msg );},
        				   success: function(data){
                    var reg = new RegExp('<div id="test">([^\\a]+?)</div>');
                    console.log(reg.exec(data));
      				}});
    Ce n'est pas mon expression regulière de départ mais toutes ont échoué...

    J'aurais perdu moins de temps à travailler côté serveur

  8. #8
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    C'est sûr, tu aurais dû travailler côté server.
    En PHP, tu aurais par exemple pu modifier ton code appelé avec un ob_start() puis un ob_get_contents() pour appliquer ta regexp.

    En plus cela aurait limité le trafic réseau car tu n'aurais renvoyer que le strict nécessaire vers le client...

    ERE

  9. #9
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Je récupère du texte, ok. Mais tout comme on injecte du texte (qui peut contenir du html) dans un div par exemple, je ne vois pas ce qui pourrait empêcher d'injecter du html dans <html>, tout simplement (bref, tout ce que je reçois sauf le doctype).
    ce n'est pas du tout pareil !
    Tout d'abord, les balises head et body doivent être uniques dans une page HTML, donc supprimer juste le doctype n'est pas suffisant.
    Ensuite, quand une page PHP est affichée par le navigateur, celui-ci interprète le code HTML pour l'intégrer à son moteur de rendu. Dans le cadre d'une réponse Ajax, c'est l'interpréteur JavaScript qui va intégrer le texte au DOM (selon des méthodes, en fonction des choix du développeur, plus ou moins propres, efficaces et compatibles !)
    Ensuite, le fait que tu aies un site fonctionnel ne t'empêche pas de créer des scripts PHP additionnels (fichiers séparés, éventuellement adaptés des pages fonctionnelles) qui seront appelés via Ajax pour obtenir les informations utiles

    Enfin, rien à voir, mais dans ta regexp, je comprends pas trop la partie :
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Par défaut
    Oui, oui, je sais comment doit être un page html, je donne des formations là-dessus mais je voulais complétement remplacer la page.
    Mais bon, c'est bourrin, c'est bête, c'est - je l'ai compris cette aprem - du travail pour rien.

    Pour la regexp, ça prend tout, absolument tout, sauf la caractère spécial alarme (le truc qui fait flasher l'écran sur unix/linux). Mais bon, le problème ne venait pas de là puisque tout fonctionnait sur mon texte test (un div extrait d'une page).

    ERE : merci, c'est une bonne idée. Je pensais qu'il y avait incompatibilité avec la compression gzip côté apache, mais il n'y rien en ce sens dans la doc php.

  11. #11
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ah ben j'y étais pas moi...
    Alors, ce que tu veux faire est problématique.
    Tout d'abord, c'est moins performant que de faire un lien classique.
    Ensuite, tu perds toute possibilité de référencement, d'historique, de mise en favoris etc.
    Ensuite, tu gardes le contexte de la page initiale pour tout ce qui est balises meta, link ou script.
    Enfin, tu pourras difficilement ajouter des scripts sur ta nouvelle page... et j'en oublie sans doute !
    Donc encore une fois, cette démarche n'est pas du tout adaptée...

    Maintenant, les apartés :
    Oui, oui, je sais comment doit être un page html, je donne des formations là-dessus
    Si tu as des tutos à proposer !

    Pour la regexp, ça prend tout, absolument tout, sauf la caractère spécial alarme (le truc qui fait flasher l'écran sur unix/linux). Mais bon, le problème ne venait pas de là puisque tout fonctionnait sur mon texte test (un div extrait d'une page).
    J'avoue que je le connaissais pas celui-là
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Ah ben j'y étais pas moi...
    Alors, ce que tu veux faire est problématique.
    Tout d'abord, c'est moins performant que de faire un lien classique.
    Ensuite, tu perds toute possibilité de référencement, d'historique, de mise en favoris etc.
    En fait, pour le référencement non. D'une part parce que la page en question n'a aucun intêret niveau référencement mais d'autre part parce que les moteurs n'utilisent pas JS justement (sauf très probablement pour Google pour voir si tu ne fais pas de cloaking).

    Pour l'historique, même pas puisque la page est la même et même si elle était différente, c'est un page après soumission de formulaire qui n'a donc aucun besoin d'être "bookmarkée".

    Ceci dit, toutes tes remarques sont à prendre en compte pour un utilisation d'AJAX (et c'est pourquoi AJAX ne m'intéressait pas dans ce cas).

    Citation Envoyé par Bovino Voir le message
    Donc encore une fois, cette démarche n'est pas du tout adaptée...
    Oui ben ça, je crois que j'ai compris hein

    Citation Envoyé par Bovino Voir le message
    Si tu as des tutos à proposer !
    Volontiers, mais je crois qu'en html/css, tout a été dit mille fois.

    Bon, merci de m'avoir supporté (dans le sens 'tolérer') pour ce sujet "bancal"

Discussions similaires

  1. Utiliser du javascript sur une page PHP
    Par encoremoi21258 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/10/2017, 08h20
  2. Réponses: 2
    Dernier message: 29/07/2011, 09h00
  3. [AJAX] passage de valeur pour une page php depuis un formulaire
    Par Ministar dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/09/2007, 21h29
  4. [AJAX] Retour a une page précédente
    Par HWICE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/07/2007, 14h48
  5. [AJAX] Réafficher d'une page php avec ajax
    Par red_nour dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/06/2007, 08h21

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