Appel d'un script PERL par Javascript

W.I.L. -  
miramaze Messages postés 1429 Date d'inscription   Statut Contributeur Dernière intervention   -
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...

3 réponses

  1. miramaze Messages postés 1429 Date d'inscription   Statut Contributeur Dernière intervention   92
     
    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 :

    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();
    

    2
  2. Julien
     
    je me pose exactement la même question, donc si quelqu'un a une réponse...
    0
  3. anonyme
     
    Moi aussi je me pose la même question !
    0
    1. chacha
       
      moi aussi et personne n'a la réponse ? :(
      0