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ê?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top