Boa tarde pessoal,
Estou desenvolvendo um sistema de pagamento via cartão de crédito que requer a execução de um ajax (request https) quando o usuário digita o número do cartão, a fim de capturar a bandeira do mesmo. O javascript deve enviar via ajax somente os 6 primeiros dígitos do cartão.
A função já está funcionando parcialmente, da seguinte forma: quando o usuário digita o sexto dígito, o ajax faz a requisição e retorna o resultado.
O problema é que quando o usuário continua digitando o restante do número do cartão, o ajax continua fazendo uma requisição a cada tecla pressionada, o que vai acabar sobrecarregando desnecessariamente o meu servidor.
Eu sei que o ideal seria acionar a função somente quando a minha keyword tivesse lenght=6 (assim, ao continuar digitando a função não seria acionada), porém tem pessoas que copiam e colam o número do cartão de uma vez, e isso geraria um bypass na função...
Além disso, o sistema deve ser capaz de reconhecer que houve uma eventual mudança nos 6 números digitados inicialmente, para fazer uma nova requisição ajax com esses números novos.
A solução que pensei, em síntese, foi criar uma variável chamada "lastquery", inicialmente com o valor "000000". Digamos que os 6 dígitos pesquisados estivessem na variável "sixdigits".
Quando a requisição ajax fosse feita, a variável "lastquery" teria valor alterado para o mesmo valor de "sixdigits".
E a requisição ajax ficaria condicionada da seguinte forma: if (lasquery !== sixdigits) { executa ajax }.
O problema é que não está dando certo. Ele continua executando normalmente, mesmo quando o valor de lastquery é o mesmo valor de sixdigits.
Alguém mais inteligente do que eu consegue me ajudar?
Segue o código que não está funcionando perfeitamente. Reparem que fiz um alert para verificar o que estava dando errado, mas a mensagem que recebo no alert é sempre algo do tipo: "10100 is not equal to 10100". Não consigo entender porque isso acontece, já que lá em cima coloquei a condicionante !==.
Obrigado!
<form method="post">
<input type="text" name="ccnumber" id="ccnumber" value="" onkeyup="getcardbin()">
</form>
<script>
var lastquery = "000000";
function getcardbin() {
var min_length = 6;
var keyword = $('#ccnumber').val();
if (keyword.length >= min_length) {
var justsix = keyword.substring(0, 6);
if (justsix !== lastquery) {
$.ajax({
url: '/getcardbin.cgi',
type: 'POST',
data: {
'tkn': 'token_interno',
'tid': 'token_interno',
'bin': justsix
},
success:function(data){
$('#returnmsg').prepend(data);
alert(justsix + ' is not equal to ' + lastquery);
var lastquery = justsix;
}
});
}
}
}
</script>