Enviando Email Utilizando JQuery Ajax sem Refresh


(Felipe Jardim Evangelista) #1

Estou tendo problemas tentando utilizar esse método de envio de formulário por email, sem dar refresh na página. Ainda não tenho muitos conhecimentos com Ajax, então não sei bem se o código está correto, até tentei por outros métodos, copiando e colando o código e só mudando algumas coisas pra ver se ia, mas não consegui. O problema é que ao clicar no botão de enviar, não ocorre nenhuma ação. A função não é chamada.

$(function($) {

    $("#form1").submit(function() {

        var nome = $("#nome").val();
        var email = $("#email").val();
        var mensagem = $("#mensagem").val();

        $("#status").html("<img src='loader.gif'/>");

        $.post('email.php', {nome: nome, email: email, mensagem: mensagem }, function(envia) {

                $("#status").slideDown();

                if (envia != false) {

                    $("#status").html(envia);
                } 

                else {

                    $("#status").html("Mensagem enviada com sucesso!");

                    $("#nome").val("");
                    $("#email").val("");
                    $("#mensagem").val("");
                }
        });
    });
   });

PHP:

<?php

require_once("class/class.phpmailer.php");
date_default_timezone_set('America/Sao_Paulo');
$ip = getenv("REMOTE_ADDR");

$mail = new PHPMailer(true);
$mail->SetLanguage("br");
// $mail->IsSMTP();
$mail->SMTPDebug = 0;   
$mail->SMTPAuth = true; 
$mail->SMTPSecure = 'ssl';

$nomeusuario = utf8_decode($_POST['nome']);
$emailusuario = utf8_decode($_POST['email']);
$mensagem = utf8_decode($_POST['mensagem']);

$mail->Host = 'email-ssl.com.br';
$mail->SMTPAuth = true;
$mail->Port = 465;
$mail->Username = '';
$mail->Password = '';

$mail->From = $emailusuario;
$mail->FromName = $nomeusuario;
$mail->AddAddress('', '');
$mail->Subject = "";
$mail->AddBcc($emailusuario);
$mail->Body = $mensagem;

    if(!$mail->Send()) {
      echo "Mensagem de erro: " . $mail->ErrorInfo;
    } else {
      echo "Mensagem enviada!";
    }

?>

HTML:






Se, ao invés de usar o action, eu usar onsubmit, sou redirecionado ao erro HTTP Error 405.0 - Method Not Allowed


(Luan Maik) #2
   //Executa a função enviar quando o formulário for 'enviado'
      $("#form1").on("submit", enviar);


    /**
     *  Função do envio de email
     */
    function enviar(event){
       //evita o refresh
       event.preventDefault();
       
       // ... Código do envio ...
    }