Appel d'un script PERL par Javascript
Fermé
W.I.L.
-
24 mars 2004 à 15:18
miramaze Messages postés 1429 Date d'inscription mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 - 26 févr. 2010 à 20:32
miramaze Messages postés 1429 Date d'inscription mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 - 26 févr. 2010 à 20:32
A voir également:
- Perl javascript
- Telecharger javascript - Télécharger - Langages
- Denon perl pro test - Accueil - Audio
- Javascript echo ✓ - Forum PHP
- Node.js javascript runtime virus ✓ - Forum Virus
- Erreur #125 javascript - Forum Mozilla Firefox
3 réponses
miramaze
Messages postés
1429
Date d'inscription
mercredi 29 juillet 2009
Statut
Contributeur
Dernière intervention
1 mai 2022
92
26 févr. 2010 à 20:32
26 févr. 2010 à 20:32
Salut,
ce post est vieux mais comme je vois qu'il y a un commentaire récent et que le post n'est pas résolu, je donne une solution.
Une méthode est d'utilisé le le module CGI disponible ici
Pour faire communiquer du Perl et du javascript d'une manière plus élégante et interactive, il y a la possibilité de faire de l'Ajax en utilisant l'objet javascript XMLHttprequest.
Pour en savoir plus sur l'objet XMLHttpRequest => XMLHttpRequest.
Un petit exemple :
ATTENTION ! : Si vous voulez exécuter l'exemple vous devez prendre garde au fait que j'utilise un alias qui est /ajax, il faut le changer dans le html et le javascript. Pareillement penser à installer le module CGI.pm et à donner les droits d'exécution au script perl. Enfin il ne faut pas oublier de spécifier à apache que vous avez des cgi à exécuter avec ce genre de directive :
Ceci étant dit, go :
D'abord le html, index.html :
Puis le JavaScript, CallServer.js, il est sous forme d'objet donc facilement réutilisable :
Et enfin le script perl Server.pl :
ce post est vieux mais comme je vois qu'il y a un commentaire récent et que le post n'est pas résolu, je donne une solution.
Une méthode est d'utilisé le le module CGI disponible ici
Pour faire communiquer du Perl et du javascript d'une manière plus élégante et interactive, il y a la possibilité de faire de l'Ajax en utilisant l'objet javascript XMLHttprequest.
Pour en savoir plus sur l'objet XMLHttpRequest => XMLHttpRequest.
Un petit exemple :
ATTENTION ! : Si vous voulez exécuter l'exemple vous devez prendre garde au fait que j'utilise un alias qui est /ajax, il faut le changer dans le html et le javascript. Pareillement penser à installer le module CGI.pm et à donner les droits d'exécution au script perl. Enfin il ne faut pas oublier de spécifier à apache que vous avez des cgi à exécuter avec ce genre de directive :
ScriptAlias /ajax/cgi-bin/ /home/miramaze/Ajax/cgi-bin/ <Directory "/home/miramaze/Ajax/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch AddHandler cgi-script cgi pl Order allow,deny Allow from all </Directory>
Ceci étant dit, go :
D'abord le html, index.html :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Comment lancer un script Perl depuis JavaScript</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <meta name="generator" content="Geany 0.14" /> <script type="text/javascript" src="/ajax/CallServer.js"></script> </head> <body> <input id="yourtext" type="text" size="50" value="Allez y écrivez un texte et appuyez sur le bouton..." /> <input id="callPerl" type="submit" value="Vas-y script Perl !" onclick="call_server.launch();" /> <br /> <br /> <div id="resultat"></div> </body> </html>
Puis le JavaScript, CallServer.js, il est sous forme d'objet donc facilement réutilisable :
function CallServer () { this.xhr_object; this.server_response; this.createXMLHTTPRequest = createXMLHTTPRequest; this.sendDataToServer = sendDataToServer; this.displayAnswer = displayAnswer; this.launch = launch; } //Ici on créer l'objet XMLHttpRequest function createXMLHTTPRequest() { this.xhr_object = null; if(window.XMLHttpRequest) { this.xhr_object = new XMLHttpRequest(); } else if(window.ActiveXObject) { this.xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); } else { alert("Your browser doesn't provide XMLHttprequest functionality"); return; } } //Ici on envoit des données au serveur et on reçoit la réponse en mode synchrone dans server_response function sendDataToServer (data_to_send) { var xhr_object = this.xhr_object; xhr_object.open("POST", "/ajax/cgi-bin/Server.pl", false); xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr_object.send(data_to_send); if(xhr_object.readyState == 4) { this.server_response = xhr_object.responseText; } } //Ici on injecte la réponse du serveur dans l'arbre DOM dans la div nommée resultat function displayAnswer () { document.getElementById("resultat").innerHTML = this.server_response; } //Fonction déclencheuse function launch () { this.sendDataToServer(document.getElementById("yourtext").value); this.displayAnswer(); } var call_server = new CallServer(); call_server.createXMLHTTPRequest();
Et enfin le script perl Server.pl :
#!/usr/bin/perl use strict; use warnings; use CGI; #On crée notre objet qui initialise le CGI package Ajax; sub new { my($classe) = shift; my $self = {}; bless($self, $classe); $self->{CGI} = CGI->new(); print $self->{CGI}->header('text/html;charset=UTF-8;q=0.9,*/*;q=0.8'); return $self; } #Méthode qui nous permet de recevoir les données du client et les renvois sous forme de tableau sub getDataFromClient { my ($self) = shift; return $self->{CGI}->param("keywords"); } #Méthode qui envoit des données au client sub sendResultToClient { my ($self, $data_to_send) = @_; print $data_to_send; } #Notre incroyable méthode qui transforme du texte sub change { my ($self) = shift; my $result = "<h1>Votre texte transformé : </h1>"; my @texte = $self->getDataFromClient(); foreach(@texte) { $result = $result.$_."Rajout inutile juste pour montrer que ça fonctionne"; } $self->sendResultToClient($result); } 1; ## Le main ## my $ajax = Ajax->new(); $ajax->change();