Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Beginner Web en 26 Enero 2022, 21:02 pm



Título: springboot y ajax formulario
Publicado por: Beginner Web en 26 Enero 2022, 21:02 pm
Hola me preguntaba porque se me recarga la página al enviar el email, como hago para que no se cargue?

este es el html

Código
  1. <form id="contact-form" class="contact-form" method="POST" th:action="@{/send}">
  2. <div class="row">
  3. <div class="col-md-6">
  4. <div class="form-group">
  5. <input type="text" class="form-control" name="NAME"
  6. placeholder="Name" th:required="true">
  7. </div>
  8. </div>
  9. <div class="col-md-6">
  10. <div class="form-group">
  11. <input type="email" class="form-control" name="EMAIL"
  12. placeholder="Email" th:required="true">
  13. </div>
  14. </div>
  15. </div>
  16. <div class="row">
  17. <div class="col-md-12">
  18. <div class="form-group">
  19. <input type="text" class="form-control" name="SUBJECT"
  20. placeholder="Subject">
  21. </div>
  22. </div>
  23. </div>
  24. <div class="row">
  25. <div class="col-md-12">
  26. <div class="form-group">
  27. <textarea class="form-control" name="MESSAGE"
  28. placeholder="Message" rows="3"></textarea>
  29. </div>
  30. </div>
  31. </div>
  32. <input type="hidden" name="_next" value="">
  33. <input type="hidden" name="_captcha" value="false">
  34. <div class="row">
  35. <div class="col-md-12">
  36. <button type="submit" class="btn mybtn2" id="botonEnviar">enviar
  37. mensaje</button>
  38. </div>
  39. </div>
  40. </form>
  41.  
  42.  
  43. ...
  44. <div th:insert="layout/footer :: footer"></div>
  45. </body>
  46. <script th:src="@{/webjars/jquery/jquery.min.js}"></script>
  47. <script th:src="@{/webjars/popper.js/umd/popper.min.js}"></script>
  48. <script th:src="@{/webjars/bootstrap/js/bootstrap.min.js}"></script>
  49. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js" ></script>
  50. <script type="text/javascript" th:src="@{/js/main.js}"></script>
  51. <script type="text/javascript">
  52. $(document).ready(function() {
  53.       $.ajax({
  54.     type:"post",
  55.     data:str,
  56.    url:"/send/mail",
  57.    dataType: "json",
  58.    success: function(result){
  59.       $(element).append(result);
  60.    }
  61. })
  62. });
  63. </html>
  64.  
  65.  

y el metodo del controlador

Código
  1. @Controller
  2. public class MailController {
  3.  
  4. @Autowired
  5. private MailService mailService;
  6.  
  7. @PostMapping("/sendl")
  8. @ResponseBody
  9. public String sendMail(@Valid @RequestParam("NAME") String name, @RequestParam("EMAIL") String email,
  10. @RequestParam("SUBJECT") String subject, @RequestParam("MESSAGE") String message)
  11. throws MessagingException {
  12.  
  13. HttpHeaders headers = new HttpHeaders();
  14. headers.add("Custom-Header", "mail");
  15. String mensaje = "¡Greetins! \n\nName: " + name + "\nE-mail: " + email
  16. + "\nMessage: " + message;
  17. mailService.sendMail(email, "beginnerweb@hotmail.com", subject, mensaje);
  18. return message;
  19. }
  20.  
  21. }

 :huh:


Título: Re: springboot y ajax formulario
Publicado por: [u]nsigned en 27 Enero 2022, 19:58 pm
Esto es solo front, el back no tiene que ver.

El problema es que tu formulario se envia por post, lo que implica una redireccion de toda la pagina.

Y luego veo que haces una petición ajax peto cuando carga el documento.

Lo que tendrias que hacer es escuchar el evento submit del formulario y llamar a la funcion preventDefault() de ese evento.

para poder escuchar el evento submit del form podes usar los bind de jquery.

Y en la petición ajax deberías agregar la opn "async:true"