Appel d'un script PERL par Javascript
W.I.L.
-
miramaze Messages postés 1468 Statut Contributeur -
miramaze Messages postés 1468 Statut Contributeur -
Bonjour!
Alors, moije voudrais exécuter mon script CGI (écrit en Perl), a partir d'une page HTML. Ce script est appelé par Javascript:
<SCRIPT ... SRC="../cgi-bin/monscript.pl">
</SCRIPT>
La page HTML contenant la javscript qui appelle mon script est généré par PHP. Mon script Perl est censé créer des répertoires et uploader des fichiers. Et je voudrais passer le nom de ces répertoires et fichiers en paramètre à mon script. Et je sais pas comment faire ça. Est-ce que quelqu'un peut m'aider svp?
J'ai essayé:
<SCRIPT LANGUAGE="JavaScript" type='text/javascript' src="../cgi-bin/monscript.pl?rep1=repertoire_1&file1=<?=fichier_1?>&file2=<?=$fichier_2?>" method="post">
</SCRIPT>
mais ça n'a pas marché... :(
Merci pour votre aide...
Alors, moije voudrais exécuter mon script CGI (écrit en Perl), a partir d'une page HTML. Ce script est appelé par Javascript:
<SCRIPT ... SRC="../cgi-bin/monscript.pl">
</SCRIPT>
La page HTML contenant la javscript qui appelle mon script est généré par PHP. Mon script Perl est censé créer des répertoires et uploader des fichiers. Et je voudrais passer le nom de ces répertoires et fichiers en paramètre à mon script. Et je sais pas comment faire ça. Est-ce que quelqu'un peut m'aider svp?
J'ai essayé:
<SCRIPT LANGUAGE="JavaScript" type='text/javascript' src="../cgi-bin/monscript.pl?rep1=repertoire_1&file1=<?=fichier_1?>&file2=<?=$fichier_2?>" method="post">
</SCRIPT>
mais ça n'a pas marché... :(
Merci pour votre aide...
A voir également:
- Perl javascript
- Telecharger javascript - Télécharger - Langages
- A javascript error occurred in the main process - Forum Handicap / Accessibilté
- Afficher un tableau javascript en html ✓ - Forum Javascript
- Javascript arrondi - Forum Javascript
- Javascript arrondi après la virgule ✓ - Forum Windows
3 réponses
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();