2009-10-16 6 views
1

J'essaie d'envoyer une paire nom: valeur à un script php en utilisant l'objet $ .post dans jQuery où le nom et la valeur sont des variables. J'ai envoyé les variables à la console dans FF, donc je sais qu'elles sont correctement définies, mais quand je regarde les en-têtes envoyés, seule la variable value est évaluée correctement, le nom est envoyé comme une chaîne littérale de la variable prénom. Voici la fonction dans son intégralité:

$(document).ready(function() { 
    $('#formS form fieldset > input').blur(function() { 
    if($(this).val()=='' && $(this).prev().is('img')) { 
    $(this).prev().remove(); 
    return; 
    } 

    if((($(this).is('#formS form fieldset > input[id*=mail]')) || 
    ($(this).is('#formS form fieldset > input[id*=sername]'))) && 
    ($(this).val()!="")) { 
     var email_field = $(this); 
     if(!$(this).prev().is('img')){ 
     $('<img src="" alt="" style="width: 16px; height: 16px;" />').insertBefore(this); 
     } 
     var type = ($(this).is('input[id*=sername]'))?'username':'email'; 
     var value = $(this).val(); 
     $.post('checkemail.php5', {type:value}, function(data) { 
       if(data == "free") { 
     email_field.prev().attr('src','/images/greentick.png').attr('alt','available'); 
     } else if(data == "taken") { 
     email_field.prev().attr('src','/images/redcross.png').attr('alt','taken'); 
     } else { 
      console.log('hmmm'+data); 
     } 
     }); 
     } 
     }); 
}); 

Ainsi, les en-têtes envoyés sont la chaîne littérale de type, et quelle que soit la valeur évalue à. Quelqu'un a des idées pourquoi?

Répondre

8

Parce que la syntaxe {} prend un ensemble de nom: . valeur où les noms deviennent la propriété sur l'objet Ceci est un littéral et ne peut pas être une variable, comme vous le voyez Utilisez ceci:.

var params = {}; 
params[type] = value; 

et passer params au lieu de {type: valeur}

+0

Merci beaucoup - cela a fonctionné parfaitement. Alors, laissez-moi simplement définir le littéral en dehors de la fonction $ .post, alors? – user97410

+0

Pourrais-je avoir créé beaucoup de telles paires de valeurs de nom dans params et les ai toutes passées, pour être accédé un peu comme les tableaux superglobaux php dans le script appelé? – user97410

+1

Oui, vous pouvez passer autant de variables que vous le souhaitez de cette façon: Ajoutez-les simplement en tant que propriétés sur l'objet params comme params.foo = bar ou en utilisant la syntaxe que j'ai déjà donnée. –

0

Je ne suis pas sûr de ce que votre problème est, ce n'est pas si clair pour moi. Je ne connais pas trop PHP, mais vous pouvez essayer comme suit:

var type = ($ (this) .is ('entrée [id * = nom d'utilisateur]'))? 'Nom d'utilisateur': 'email'; var value = $ (this) .val(); var data = type + "=" + valeur;

.post $ ('checkemail.php5', les données, la fonction (données) {.......

mieux,

+0

J'ai essayé de concaténer les deux ensemble, avec le côlon requis entre les deux au lieu des égaux, et cela n'a pas fait mieux que j'ai peur. – user97410

0

exactement ce que je cherchais Da rk Falcon, merci!

était difficile de trouver cette solution, BTW. Je suppose que la plupart des gens ne font que sérialiser les données du formulaire et les envoient comme paramètres, mais dans certains cas, il est bon d'utiliser l'appariement variable-name => variable-value, ce qui me rendait fou variable fonctionnait

Questions connexes