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
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...
A voir également:

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
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
je me pose exactement la même question, donc si quelqu'un a une réponse...
0
Moi aussi je me pose la même question !
0
moi aussi et personne n'a la réponse ? :(
0