Ir ao conteúdo

JQuery Enviar resposta do Ajax por e-mail com phpmailer


Ir à solução Resolvido por DiF,

Posts recomendados

Postado

Galera poderiam me dar uma luz?
Tenho um código que faz o envio de um input e o retorno ele insere em uma div, mais especificamente em spans dentro de uma div, depois estes spans são exibidos em um modal.

Estou precisando capturar essas respostas que são inseridas nesses spans e fazer um post para a página de envio de e-mail do phpmailer e assim enviar por e-mail.

 

Segue html onde o response do ajax é inserido:

<span id="type"></span>
<span id="message"></span>
<span id="time"></span>
<span id="jobposition" style="display:none"></span>
<span id="company" style="display:none"></span>

 

 

Segue o código do Ajax fazendo o post numa URL e no final, o código do response sendo inserido nos spans:

	$.ajax({
            url: url + '/webplan/planing',
            type: 'post',
            dataType: 'json',
            data: { type: method, idno: idno, },
            headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') },

            success: function(response) {
                if (response['error'] != null) {
                    // clear old text
                    $('#type, #employee').text("").hide();
                    $('#time').html("").hide();
					
                    // insert new text
                    $('#message').text(response['error']);
                    $('#employee').text(response['employee']);

                  toast.show();
				  
                } else {
                    function type(clocktype) {
                        if (clocktype == "clockin") {
                            return lang_clockin;
						} else {
                            return lang_clockout;
                        }
                    }
                    // clear old text
					$('#type, #employee, #message').text("").show();
                    $('#time').html("").show();

                    // insert new
					$('#type').text(type(response['type']));
					$('#employee').text(response['employee']);
					$('#jobposition').text(response['jobposition']);
					$('#company').text(response['company']);
					$('#time').html('<span class="fw-bolder">' + response['time'] + '</span>' + ' ' + '<span> {{ __("regitrada com 						sucesso!") }}</span>');
					toast.show();

 

 

O que é preciso é pegar essas respostas inseridas nos spans #type, #employee, #jobposition, #company, #time e fazer um novo post no arquivo enviaremail.php. Normalmente esse tipo de post é feito por formulários através de um input, mas nesse caso não faço ideia do que usar de gatilho para fazer o post.

Se puderem me ajudar ficarei muito grato.

 

 

 

 

  • Moderador
  • Solução
Postado

@tiagopraz Acredito que você não precisa do form, para enviar dados pelo ajax.

 

Basta pegar o valor dos campos,  e enviar...  mas de fato é bem mais fácil se você adicionar a tag form no modal que tem os campos..

 

Por exemplo, sem form:

 

let btn = $("#btn_enviar");

btn.on("click", function({
     let tipo = $("#type").text();
     let empregado = $("#employee").text();
     let msg  = $("#message").text();

     $.ajax({
          url: "envia.php",
          method: "POST",
          dataType: "HTML",
          data: {tipo: tipo, employee: empregado, menssage: message}
     }).done(function(retorno){
         //aqui você coloca mensagem de envio
     }).fail(function(retorno){
        //aqui você coloca mensagem de erro
     });

 

Mas se você adicionar o form no seu modal,  você faz inserir os dados em um input, sem bordas.. parecendo que está ali sem ser em um input... dai você pega com  ".val() " os dados...

E se tiver um form.. fica mais simples porque você só precisa pegar o valor total do form e colocar em uma variavel com serialize...

 

dessa forma:

 

<form>
<span id="type"><input type="text" name="tipo" value="" /></span>
<span id="message"><input type="text" name="message" value="" /></span>
<span id="time"><input type="text" name="time" value="" /></span>
<span id="jobposition" style="display:none"><input type="text" name="employee" value="" /></span>
<span id="company" style="display:none"></span>
</form>

 

let dados = $("form").serialize();

 

usando o serialize.. iria gerar a seguinte url: tipo=valor&message=valor&time=valor&employee=valor

 

ai é só separar no php... e montar seu envio para o email.

 

Postado

Poxa muito obrigado @DiF
Me ajudou muito. Eu consegui fazer uma condição na exibição do modal para que não precisasse clicar em nada para fazer o post.

O modal é exibido na página com "toast.show();". Fiz uma condição:

toast.show(); 
if (toast.show()); {

Depois daqui passei as variáveis continuei com o código de post do ajax. 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!