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

Web Perl Discussion :

Perl CGI Ajax, Header, ajout de références scripts externes


Sujet :

Web Perl

  1. #1
    Futur Membre du Club
    Homme Profil pro
    System Specialist III
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : System Specialist III

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut Perl CGI Ajax, Header, ajout de références scripts externes
    Bonjour,

    Vous êtes ma dernière chance! j'ai fait plusieurs forums, regardé la documentation CPAN pour le module CGI::AJAX, une quantité incroyable d'informations sur le web mais j'ai fait chou blanc.
    Alors merci d'avance pour votre aide.

    Je débute en Perl CGI et je veux utiliser le module AJAX dans la construction d'une page html. J'ai compris le principe et ça fonctionne très bien. Là où je bute c'est pour la construction de la page HTML. Je ne trouve pas comment rajouter un référence de script exterme dans le Header. J'obtiens toujours l'erreur suivante:
    "No head/html tags, nowhere to insert. Returning javascript anyway". Si j'analyse la page avec firebug je trouve bien ma référence javascript, mais l'insertion de l'Ajax ne veux pas se faire dans la section Head. Voila mon script, pour ne pas être trop long je l'ai abrégé;

    use CGI qw(:standard);
    use CGI::Carp qw(fatalsToBrowser);
    use strict;
    use CGI; # or any other CGI:: form handler/decoder
    use CGI::Ajax;
    my $cgi = new CGI;
    my $pjx = new CGI::Ajax( 'exported_func' => \&RESOLVE);
    print $pjx->build_html($cgi,\&Show_HTML, {-charset=>'UTF-8', -expires=>'-1d'});

    sub RESOLVE {.......
    }
    sub Show_HTML {
    print header,
    start_html( -title=>'Exemple de formulaire crée par un script Perl',
    -script => {-language => 'javascript', src=> 'http://<mon javascript>'}),
    h1('Ma page'),
    ...........
    end_html;
    }

    Meilleures salutations
    Smooky132

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -script => {-language => 'javascript', -src=> 'http://<mon javascript>'}),
    t'aurais pas oublié le tiret

    sinon pourquoi mettre http://<mon javascript> et non pas
    De plus quand tu utilise cgi::ajax, c'est lui qui te cree les entetes donc si tu veux le changer, c'est en triosieme argument de build je pense

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Show_HTML doit retourner un code html.

    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
    #!C:/Perl/bin/perl.exe
    use CGI qw(:standard);
    use CGI::Carp qw(fatalsToBrowser);
    use strict;
    use CGI; # or any other CGI:: form handler/decoder
    use CGI::Ajax;
    my $cgi = new CGI;
    my $pjx = new CGI::Ajax( 'exported_func' => \&RESOLVE);
    print $pjx->build_html($cgi,
      \&Show_HTML, 
     {-charset=>'UTF-8', 
      -expires=>'-1d',
    });
     
    sub RESOLVE {
    return;
    }
    sub Show_HTML {
      my $html = "<html><body>";
      $html .= $cgi->start_html(
        -lang   => "fr-en",
        -title  => "Exemple de formulaire crée par un script Per",
        -style  => { "src"     => "toto.css" },
        -script => { -language => "JAVASCRIPT", 
                      -src      => "http://mon javascript>",
                    },
        );
    $html .= h1('Ma page'),
        return $html;
    }

  4. #4
    Futur Membre du Club
    Homme Profil pro
    System Specialist III
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : System Specialist III

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut show_html
    Merci pour ton aide.

    Ce n'est pas le caractère "-" qui cause le problème.

    Je suis d'accord avec toi show_html doit retourner un code html.

    Dans mon cas j'utilise: print header, start_html(...
    Ceci retourne bien un code html. j'ai regardé avec firebug et le code est bien la! L'insertion de l'ajax ne s'effectue malheureusement pas quand on se sert des fonction objet de CGI.

    Meilleures salutations
    Smooky

  5. #5
    Futur Membre du Club
    Homme Profil pro
    System Specialist III
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : System Specialist III

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut show_html
    Merci pour ton aide.

    Ce n'est pas le caractère "-" qui cause le problème.

    Je suis d'accord avec toi show_html doit retourner un code html.

    Dans mon cas j'utilise: print header, start_html(...
    Ceci retourne bien un code html. j'ai regardé avec firebug et le code est bien la! L'insertion de l'ajax ne s'effectue malheureusement pas quand on se sert des fonction objet de CGI.

    Meilleures salutations
    Smooky

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    non, "print header..." ne produit pas un code HTML, il produit une réponse HTTP, le header() ne fait pas partie du HTML, il l'introduit seulement, supprime le et voit si ça s'arrange.

    --
    Jedaï

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Le code mis ci dessus est ok, j'ai l'impression que tu ne l'a pas lu
    tu verras bien à l'intérieur que je n'ai pas mis de header() dans la procedure.
    Le javascript se met dans le start_html .

  8. #8
    Futur Membre du Club
    Homme Profil pro
    System Specialist III
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : System Specialist III

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut CGI function-oriented and object-oriented
    Pour Jedai: sans le print header plus rien ne fonctionne..

    Pour djibril:
    J'ai bien lu ton code!
    Je pense que je n'ai pas été compris
    Je veux utiliser la méthode function-oriented. exemple de script:

    #!/usr/local/bin/perl
    use CGI qw/:standard/;
    print header(),
    start_html(-title=>'Wow!'),
    h1('Wow!'),
    'Look Ma, no hands!',
    end_html();

    Ce que tu m'as gentilment montré doit être la méthode object-oriented: exemple:

    #!/usr/local/bin/perl
    use CGI;
    $q = new CGI;
    print $q->header(),
    $q->start_html(-title=>'Wow!'),
    $q->h1('Wow!'),
    'Look Ma, no hands!',
    $q->end_html();

    j'ai trouvé l'information ici:

    http://search.cpan.org/src/LDS/CGI.p.../cgi_docs.html

    et dans le livre CGI programming.

    Merci de me dire si je me trompe!

    J'ose espérer que le module cgi::ajax peut fonctionner avec les deux méthodes... Peux tu répondre à cette question?

  9. #9
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par djibril Voir le message
    Le code mis ci dessus est ok, j'ai l'impression que tu ne l'a pas lu
    tu verras bien à l'intérieur que je n'ai pas mis de header() dans la procedure.
    Le javascript se met dans le start_html .
    Je l'ai lu, je signalais simplement son erreur à smooky132 (si tu étais correct dans ton assomption que build_html devait prendre une fonction produisant du HTML).

    Par ailleurs, pourquoi (my $html = "<html><body>") ? start_html prend déjà soin de ça.

    En fait après consultation de la doc de CGI::Ajax le vrai problème de la première solution c'est que Show_HTML() ne renvoie pas le HTML créé : il le print() directement... Ce n'est pas ce que build_html veut, comme Djibril le disait, build_html() prend en paramètre une fonction qui retourne un code HTML, ce HTML peut être construit avec l'interface fonctionnelle de CGI ou l'interface objet, peu importe, mais il doit être renvoyé, pas print()é et il ne doit pas contenir le header() non plus.

    --
    Jedaï

  10. #10
    Futur Membre du Club
    Homme Profil pro
    System Specialist III
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : System Specialist III

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Je suis toujours dans le flou.
    Je suis d'accord que c'est bien start_html qui gère le code html (page 105 de CGI Programming with Perl).

    Pourquoi je ne trouve aucun exemple concret sur internet utilisant la constellation que je désire?
    CGI methode orientée fonction et AJAX

    Merci encore pour votre aide

  11. #11
    Futur Membre du Club
    Homme Profil pro
    System Specialist III
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : System Specialist III

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut AJAX B
    Bonjour,

    Le problème se situe sûrement à cet endroit!

    http://rt.cpan.org/Public/Bug/Display.html?id=24472

    Meilleures salutations

  12. #12
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Bon écoute, je comprends pas ce que tu veux.
    On vient de te dire qu'il n'est pas possible d'utiliser header si tu utilise ajax.
    Et d'ailleurs, pourquoi tu t'obstines à vouloir l'utiliser?
    Si tu avais des options de header que tu souhaite mettre dans ton script, tu peux les mettre dans build_html comme tu l'as déjà fait (e "eme argument.
    Le reste se met dans start_html.
    donc on ne vois vraiment pas où est ton problème.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    System Specialist III
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : System Specialist III

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Je suis très touché par votre réponse...

    je viens de trouver la solution moi-même et ça doit fonctionnner avec header.

  14. #14
    Rédactrice

    Avatar de stoyak
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 408
    Points : 1 491
    Points
    1 491
    Par défaut
    Si tu as trouvé ta solution, pourquoi ne pas la mettre à dispo sur ce forum?
    Le but est de partager et de se faire aider.
    Cela demande du courage d'en tirer du plaisir
    Quand on n'a qu'un marteau, tous les problèmes ressemblent à un clou

  15. #15
    Futur Membre du Club
    Homme Profil pro
    System Specialist III
    Inscrit en
    Octobre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : System Specialist III

    Informations forums :
    Inscription : Octobre 2008
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    .64 2005-10-27 09:45 -0700 Thu, 27 Oct 2005
    Fixed cross-site scripting vulnerability identified in the <=0.60
    versions. All users of CGI::Ajax should upgrade asap! If a browser
    submits a request for a CGI::Ajax page that contains a function that
    doesn't exist, a status 400 Bad Request is returned. Additionally,
    STDERR gets some output about this event with a "SECURITY" tag, just
    in case. Thanks to krusch for catching this!

    Changed how CGI extra header parameters are passed into the CGI
    object. Now all parameters destined to CGI->header() are added as a
    hashref to the CGI::Ajax->build_html() method, like this for example

    $pjx->build_html( $cgi, \&Show_HTML, {-charset=>'UTF-8'} );

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Perl CGI Ajax, Header, ajout de références scripts externes
    Par smooky132 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 03/11/2008, 16h42
  2. header() en perl->CGI
    Par mauroyb0 dans le forum Web
    Réponses: 9
    Dernier message: 12/05/2006, 09h35
  3. Probleme apache et script perl-CGI
    Par Kara dans le forum Web
    Réponses: 8
    Dernier message: 20/04/2006, 21h05
  4. Réponses: 3
    Dernier message: 03/02/2006, 23h31
  5. [perl/CGI] Ecrire du HTML dans un script perl
    Par LE NEINDRE dans le forum Web
    Réponses: 3
    Dernier message: 02/08/2005, 14h50

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