Is it wrong to mix $ .post with $ .ajax in jQuery?

1

I'm doing a login screen with Ajax, jQuery and PHP.

Follow the code:

  $(document).ready(function(){
        //Quando 'btnEntrar' for clicado
        $("#btnEntrar").click(function(){
            //Envia por POST para a página login.php: usuario = valor da textbox usuario
            //e senha = valor da textbox senha (pegando valores pelo ID)
            var envio = $.post("processarLogin.php", { 
             nick: $("#form-username").val(), 
            senha: $("#form-password").val() 
            })
            $.ajax({
            beforeSend: function(){
              $("#resultado").html("<div class='alert alert-info'><i class='fa fa-spinner'></i> Verificando dados...</div>");
            }
            })
            //Se achou a página, exiba o resultado no elemento com ID resultado
            envio.done(function(data) {
                if(data==0){
                 $("#resultado").html("<div class='alert alert-danger'><i class='fa fa-warning'></i> Nome de usuário ou senha incorretos.</div>");
                }else{
                 $("#resultado").html("<div class='alert alert-success'><i class='fa fa-check-circle'></i> Login bem sucedido, você será redirecionado...</div>");
                 setTimeout(function(){ document.location.href='painel.php';},500);
                }
            })
            //Se envio falhar
            envio.fail(function() { alert("Erro na requisição"); }) 
        });
    });

As you can see, I use $.post to send the request. However, I used $.ajax only to use beforeSend , and it works, it displays the message before, during and after validation ...

Is this wrong? How would the request be if it were all done with $.ajax ?

    
asked by anonymous 21.02.2016 / 14:05

1 answer

2

The $.post is actually $.ajax , but it only does POST, and beforeSend is used to configure a specific jQuery ajax request / event, it's not wrong to use both, what's wrong is more the way you used it (it's redundant), I actually think beforeSend might not even be fired in this case, you could just do this:

        var envio = $.post("processarLogin.php", { 
             nick: $("#form-username").val(), 
            senha: $("#form-password").val() 
        });

        $("#resultado").html("<div class='alert alert-info'><i class='fa fa-spinner'></i> Verificando dados...</div>");

        //Se achou a página, exiba o resultado no elemento com ID resultado
        envio.done(function(data) {
            if(data==0){
             $("#resultado").html("<div class='alert alert-danger'><i class='fa fa-warning'></i> Nome de usuário ou senha incorretos.</div>");
            }else{
             $("#resultado").html("<div class='alert alert-success'><i class='fa fa-check-circle'></i> Login bem sucedido, você será redirecionado...</div>");
             setTimeout(function(){ document.location.href='painel.php';},500);
            }
        });

        //Se envio falhar
        envio.fail(function() { alert("Erro na requisição"); });

Because beforeSend is more to set up the request for a specific ajax event (other than the ajaxSetup setting for all jQuery ajax events).

If you want to use $.ajax + POST + beforeSetup to set a specific event, do so:

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  beforeSend: function(xhr){
      //Reescreve o mimeType do formulário na hora do envio
      xhr.overrideMimeType( "text/plain; charset=utf-8" );
  }
}).done(function() {

}).fail(function() {

});
    
21.02.2016 / 14:28