Oii Rafael, tudo bem?
Para a primeira, a respeito da requisição POST que está sendo chamada várias vezes, pode ser que você esteja chamando essa função dentro de algum loop ou de algum evento que está sendo disparado várias vezes.
Por exemplo, se você colocou a chamada da função dentro de um evento de clique de um botão, toda vez que o botão for clicado, a função será chamada.
botao.addEventListener('click', function() {
// sua requisição POST aqui
});
Neste caso, se o botão for clicado 5 vezes, a função será chamada 5 vezes.
Outra possibilidade é que a chamada da função esteja dentro de um loop, como um for
ou while
. Nesse caso, a função será chamada tantas vezes quanto o loop for executado.
for (let i = 0; i < 5; i++) {
// sua requisição POST aqui
}
Neste exemplo, a função será chamada 5 vezes, porque o loop está sendo executado 5 vezes.
Para evitar que a função seja chamada várias vezes, você precisa garantir que ela seja chamada apenas uma vez, no lugar certo do seu código.
Agora, sobre a sua segunda dúvida, sobre as imagens, poderia nos dizer sobre quais imagens você tá falando? Mandando parte do código etc.
Geralmente elas são hospedadas em um servidor. Como por exemplo, hospedadas no servidor da Amazon (s3.amazonaws.com).
Existem vários serviços de hospedagem de imagens, como o próprio Amazon S3, Google Cloud Storage. Para usar esses serviços, você precisa criar uma conta, fazer o upload das suas imagens e então você receberá um link para cada imagem, que poderá ser usado no seu código.
Mas não conheço nenhum de graça. Os citados são pagos.
Espero ter ajudado.
Um abraço e bons estudos.