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

AJAX Discussion :

[AJAX] argv[1], cgi, prog .c et XMLHttpRequest


Sujet :

AJAX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 17
    Points : 18
    Points
    18
    Par défaut [AJAX] argv[1], cgi, prog .c et XMLHttpRequest
    Bonjour à tous, je suis bien bloqué et j'ai besoin de l'aide des "pros"...
    Sur un serveur 'lighttpd" j' appel des prog en langage c grâce au module "cgi".
    Jusqu'ici tous va bien, mais j'ai besoin de passer un paramètre a un de mes prog.
    Pour tester j'ai :
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main ( int argc , char * argv[] ) 
    {
    	int i;
    	// affichage des arguments
     
    	printf("Nombre d’arguments passes au programme : %d\n",	argc);
    	for(i = 0 ; i< argc ; i ++) 
    	{
    		printf(" argv[%d] : %s \n", i, argv[i]);
    	}
     
    	return 0 ;
    }
    Je le compile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cc -o test_arg test_arg.c
    et le bouge dans le rep cgi_bin.
    je test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ~$ /var/www/cgi-bin/test_arg patate
    l'argument patate est bien dans argv[1]

    je dois appeler ce prog avec XMLHttpRequest, ça execute le prog mais je n'arrive pas a lui passer d'arguments!!
    Voici la fonction sans test d'ajout de paramètre:
    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
    function action_bp_5()
    {
    var xhr_object = null; 
     
    if(window.XMLHttpRequest) // Firefox 
       xhr_object = new XMLHttpRequest(); 
    else if(window.ActiveXObject) // Internet Explorer 
       xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
    else { // XMLHttpRequest non supporté par le navigateur 
       alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
       return; 
    } 
    xhr_object.open("GET", "/cgi-bin/test_arg", false);
    xhr_object.send();
     
    if(xhr_object.readyState == 4) alert(xhr_object.responseText); 
    }
    alert() me renvoi seulement argv[0] (le nom du prog)
    j'ai fais pas mal de tests avec la méthode "POST" et plein d’autres avec "GET"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var str_var = encodeURIComponent(" patate");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var params = "patate";
     
    xhr_object.open("POST", "/cgi-bin/test_arg", false); 
    xhr_object.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr_object.send(params);
    je vous les met pas tous...
    mais je ne parviens pas a appeler ce prog avec un paramètre...
    Quelqu'un a une idée?
    Un ptit coup de main?...

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Problème résolu... après quelques recherches.

    Il faut utiliser les "variables d’environnement cgi" (http://fr.wikipedia.org/wiki/Variabl...ironnement_CGI)

    Pour que le main() y ait accès, il faut ajouter un paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char **argv, char** envp)
    ajouter un "?" suivit du texte que vous voulez faire passer a main(), dans votre XMLHttpRequest:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr_object.open("GET", "/cgi-bin/test_env_var?un_arg...", false);
    La variable d'environnement "QUERY_STRING" contient le texte.
    Je partage une fonction que j'ai fait pour tester... >Elle retourne la valeur d'une variable d'environnement passer en paramètre.
    Bien commenté pour les débutants.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char *str_val_of_var_env(char *var_env)	//ex : "QUERY_STRING=blablabla" 
    {
     
    	char *str_return = malloc (256);	// attribut un espace memoire pour le return 
     
    	int k = strlen(strstr(var_env, "="))- 1;	//nb  de char de "=blablabla" -1 (le "=")
     
    	char str_to_find[k];
     
    	int h = strlen(var_env)  - strlen(strchr(var_env, '=') +1);//nb de char de "QUERY_STRING=blablabla" - nb de char de "=blablabla" et egale a nb de char de "QUERY_STRING" et on rajoute 1 pour avoir nb de char de "QUERY_STRING="
    	int i = strlen(var_env) - h;	//nb  de char de "QUERY_STRING=blablabla" - nb  de char de "QUERY_STRING="
    	int j;
     
    	for ( j = 0; j < i; j++)
    	{
    		str_to_find[j] = var_env[j+h];
    	}
     
    	str_to_find[k] = '\0';
    	strcpy(str_return, str_to_find);	//copie le str trouvé dans la chaine de return
    	//printf ("str_return = [%s] \n", str_return);
    	return str_return;
     
    }//fin str_val_of_var_env()
     
     
    int main(int argc, char **argv, char** envp)	//ajouter char** envp aux parametres de main() pour avoir accès aux varaibles d'environnement
    {
     
    	char *str_var_env;	//pour copier la chaine qui contient la variable d'environnement rechercher
    	char *var_env_to_find = "QUERY_STRING";	//le nom de la variable que l'on recherche
     
    	char** env;
    	for (env = envp; *env != 0; env++)
    	{
    		char* thisEnv = *env;
    		//printf("%s\n", thisEnv);//affiche toutes les variables d'environnement dispo
     
    		str_var_env = strstr(thisEnv, var_env_to_find);//trouve la variable d'environnement rechercher
     
    		if (str_var_env != NULL)
    		{
    			//printf("find!: %s\n", str_var_env);
    			char *one_EnvVar = str_val_of_var_env(str_var_env);//fonction qui retourne la valeur de la variable d'environnemet demandé
    			printf("Valeur de %s = %s \n", var_env_to_find, one_EnvVar);
    			return 0;
    		} 
     
    	}
    	printf("no find this var... \n");
    	return -1;
     
    }// fin main

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

Discussions similaires

  1. [AJAX] AJAX avec python cgi et jquery
    Par alaninho dans le forum AJAX
    Réponses: 0
    Dernier message: 22/04/2014, 15h00
  2. Réponses: 8
    Dernier message: 01/04/2011, 08h15
  3. [AJAX] Firefox 2.0 ne reconnaît plus xmlHttpRequest ?
    Par senacle dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/11/2006, 18h09
  4. [AJAX] Récupération tronquée de donnée binaire via XMLHttpRequest
    Par Christophe Charron dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/06/2006, 18h21
  5. Réponses: 2
    Dernier message: 08/02/2006, 14h11

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