[AJUDA] Requisições se multiplicando a cada interação com input
Olá, estou tendo dificuldade com requisições que se multiplicam indesejadamente e nao consegui uma solução até o momento.
Acontece que, possuo um select html que ao ser escolhida um option ele efetua uma requisição ao backend e retorna os valores do db nos input abaixo do formulário, até aí tudo certo, a consulta está sendo executada e retornada de maneira correta, porem a cada troca de option desse select sem recarregar a página as requisições são multiplicadas, ex: quando seleciono pela primeira vez, efetua 1 vez a requisição, ao selecionar novamente a requisição é feita 2 vezes seguidas, e isso vai escalando, testei alterar o select 9 vezes sequidas e a mesma requisição é realizada 9 vezes em sequencia com os mesmos parametros, com a mesma resposta, como se existisse uma variavel que a cada interação soma 1 e multiplica a requisição.
aqui uma amostra do select alterado 3 vezes
[15/Mar/2023 23:46:29] "GET /propriedades/atualiza_propriedade/17/ HTTP/1.1" 200 102 [15/Mar/2023 23:46:32] "GET /propriedades/atualiza_propriedade/20/ HTTP/1.1" 200 108 [15/Mar/2023 23:46:32] "GET /propriedades/atualiza_propriedade/20/ HTTP/1.1" 200 108 [15/Mar/2023 23:46:35] "GET /propriedades/atualiza_propriedade/22/ HTTP/1.1" 200 136 [15/Mar/2023 23:46:35] "GET /propriedades/atualiza_propriedade/22/ HTTP/1.1" 200 136 [15/Mar/2023 23:46:35] "GET /propriedades/atualiza_propriedade/22/ HTTP/1.1" 200 136
função js que realiza a consulta:
$(document).on('change', '#id_propriedade', function () {
var propriedade_id = $(this).val();
$.ajax({
url: '/propriedades/atualiza_propriedade/' + propriedade_id + '/',
success: function (dados) {
$('#id_nome').val(dados.nome);
$('#id_area').val(dados.area);
$('#id_ie').val(dados.ie);
$("#id_uf option").each(function () {
if ($(this).text() == dados.uf) {
$(this).prop("selected", true);
}
});
$("#id_municipio").empty();
$("#id_municipio").append($('<option>', {
value: dados.municipio,
text: dados.municipio
}));
}
});
});
}```
Cara, erro simples.
$(document).on('change', '#id_propriedade', function () {
// other things here ...
})
Você está falando "Documento, para cada alteração do formulário, faça a requisição". E na parte
$("#id_uf option").each(function () {
if ($(this).text() == dados.uf) {
$(this).prop("selected", true);
}
});
Praticamente pra cada option
você tá também fazendo uma outra interação. Provavelmente deve ser aqui que está sendo o seu "multiplicador" de requests.
Sei que falei que é um erro simples, mas comecei meu dia lendo e-mails, não vou mexer com código tão cedo kkkk
E outra cara, larga o chatGPT. Tem que ler o próprio código as vezes amigo! Fonte: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event
TLDR: Alterar o selet
dispara o evento change
Tenta assim:
$(document).ready(function() {
$('#id_propriedade').on('change', function() {
var propriedade_id = $(this).val();
$.ajax({
url: '/propriedades/atualiza_propriedade/' + propriedade_id + '/',
success: function (dados) {
$('#id_nome').val(dados.nome);
$('#id_area').val(dados.area);
$('#id_ie').val(dados.ie);
$("#id_uf option").each(function () {
if ($(this).text() == dados.uf) {
$(this).prop("selected", true);
}
});
$("#id_municipio").empty();
$("#id_municipio").append($('<option>', {
value: dados.municipio,
text: dados.municipio
}));
}
});
});
});
Verifique também se não há ID duplicado.