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] Variable dans appel Ajax


Sujet :

AJAX

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 59
    Points
    59
    Par défaut [AJAX] Variable dans appel Ajax
    Bonsoir à tous,

    Voilà mon problème, je viens d'installé Facebook Connect, et je connais des problèmes pour les variables lors de l'appel Ajax.

    En fait j'ai un fichier facebook.js, dans lequel j'ai :

    - un appel ajax qui me sert à creer des variables de session

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $.ajax({ // Requete ajax
    		type: "POST", // envoie en POST
    		url: "http://www.jaimetoo.com/cayoteux/includes/connexion.inc.php", // url cible du script PHP
    		data: "uid="+uid+"&name="+name+"&image="+image+"&url="+url, // données envoyées
       });
    - un remplissage du formulaire pour les commentaires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Remplissage des formulaires en utilisant les donnees des services
    	$('#name').val(name);
    	$('#url').val(url);
    	$('#image').val(image);
    Le fichier comment.php qui récupere les variable du formulaire envoyées par post sont correctement enregistrées dans la base de données, notamment l'url de l'avatar de l'utilisateur.

    Le probleme se pose lors de l'appel ajax, les valeurs récuperees dans le fichiers connexion.php, sont toutes bonnes sauf celle contenant l'url de l'avatar, qui est plus courte.

    Au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://external.ak.fbcdn.net/safe_image.php?d=d8db60c7e3f981217aee7b6f4d8968de&url=http%3A%2F%2Fprofile.ak.fbcdn.net%2Fhprofile-ak-snc4%2F41773_691287339_634_q.jpg&logo&v=5
    j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://external.ak.fbcdn.net/safe_image.php?d=d8db60c7e3f981217aee7b6f4d8968de
    Comme si le "&" posait problème. Pourtant dans les deux cas c des données JS, envoyées par post, l'un par formulaire, l'autre avec un appel Ajax et pourtant les données différent.

    Je comprend pas, aidez-moi xD

    Merci d'avance

  2. #2
    Membre confirmé Avatar de nadox
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2010
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 360
    Points : 551
    Points
    551
    Par défaut
    Bonsoir,
    Les paramètres utilisés par l'appel ajax sont découpé grâce au "&" donc si l'un d'eux contient ce caractère, le reste sera considéré comme un autre paramètre.
    En gros, il faut remplacer tout les "&" par "&".
    Mieux : faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url = encodeURIComponent(url);
    avant de l'utiliser en ajax.

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Euh... je comprends pas trop en fait
    la propriété url, pour toi, c'est l'URL de destination de la requête ou le paramètre à envoyer ? Dans le second cas, tu commets une erreur

    Sinon, il faut faire un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data: "uid="+uid+"&name="+name+"&image="+image+"&url="+encodeURIComponent(url)
    afin d'échapper les caractères spécifiques d'une URL dans le paramètre.

  4. #4
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    En fait, ce sont toutes les paires clé/valeur qui doivent être converties.
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data:
    	"uid="+encodeURIComponent(uid)+
    	"&name="+encodeURIComponent(name)+
    	"&image="+encodeURIComponent(image)+
    	"&url="+encodeURIComponent(url)
    L'idéal est d'automatiser tout ça avec une fonction qui retourne une chaîne de caractères composée de toutes les paires clé/valeur converties et séparés par l'esperluette.
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function encodeData(data){
    	var k,s=[];
    	for(k in data)s.push(encodeURIComponent(k)+'='+encodeURIComponent(data[k]));
    	return s.join('&');
    }
    où l'argument data correspond à un objet contenant les paires clé/valeur...
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data: {
    	cle1:'valeur 1',
    	cle2:'Valeur 2',
    	// etc...
    }

    À tester...
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $.ajax({ // Requete ajax
    	type: "POST", // envoie en POST
    	url: "http://www.jaimetoo.com/cayoteux/includes/connexion.inc.php", // url cible du script PHP
    	data: encodeData( { // données envoyées
    		uid:uid,
    		name:name,
    		image:image,
    		url:url
    	})
    });

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    N'utiliser pas name comme non de variable.

    Et oui, c'est du copier coller.

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 59
    Points
    59
    Par défaut
    Merci à tous le encodeURIComponent fonctionne très bien

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

Discussions similaires

  1. Header location dans appel ajax ne focntionne pas.
    Par sp2308 dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2017, 17h10
  2. Réponses: 2
    Dernier message: 23/11/2017, 11h42
  3. [AJAX] Attendre la fin d'un appel Ajax fait dans une fonction
    Par grinder59 dans le forum jQuery
    Réponses: 1
    Dernier message: 19/03/2016, 20h09
  4. Réponses: 4
    Dernier message: 06/11/2007, 15h05
  5. [AJAX] Effectuer plusieur appel ajax
    Par shwin dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/10/2005, 17h40

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