Problemas ao passar jQuery $.post uma variável como parâmetro
-
21-09-2019 - |
Pergunta
Estou tentando enviar um par nome:valor para um script php usando o objeto $.post em jQuery, onde nome e valor são variáveis.Enviei as variáveis para o console no FF, então sei que estão sendo configuradas corretamente, mas quando visualizo os cabeçalhos sendo enviados, apenas a variável valor está sendo avaliada corretamente, o nome está sendo enviado como uma string literal da variável nome.Aqui está a função em sua totalidade:
$(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);
}
});
}
});
});
Portanto, os cabeçalhos enviados são a string literal tipo, e o que quer que valor avalia para.Alguém tem alguma idéia do porquê?
Solução
Porque a sintaxe {} leva um conjunto de nome:valor onde os nomes se tornam propriedades do objeto.Isso é literal e não pode ser uma variável, como você pode ver.Usa isto:
var params = {};
params[type] = value;
e passe parâmetros em vez de {type:value}
Outras dicas
Não tenho certeza de qual é o seu problema, não está tão claro para mim.Também não tenho muito conhecimento em php, mas você pode tentar assim:
var type = ($(this).is('input[id*=sername]'))?'username':'email';var valor = $(this).val();var dados= tipo+"="+valor;
$.post('checkemail.php5', dados, função(dados) {.......
O melhor,
exatamente o que eu estava procurando Dark Falcon, obrigado!
foi difícil encontrar essa solução, aliás.Presumo que a maioria das pessoas está apenas serializando os dados do formulário e enviando-os como post param, mas em alguns casos é bom usar o emparelhamento nome-variável => valor-variável, o que estava me deixando maluco, pois nada que tentei ao usar o nome como um variável estava funcionando