How to clear inputs after performing an ajax request?

Asked

Viewed 1,490 times

0

I have an AJAX function that while loading the database information to feed the inputs is written "Loading...". If you do not find any information it continues with this loading written in inputs until I refresh the page or do another search. I made a if at the end to clean the input but I’m not getting it, someone has some idea?

Follows code:

//-----------------------------------------------------
//Funcao: functionjson
//Autor: Rafael Assmann <[email protected]>
//Sinopse: Json para capturar código do produto e reali
//zar a busca no banco de dados e preencher os demais campos deste produto
//Parametro:
//   codProduto[] : código do produto digitado para pesquisa
//Retorno: nomeProduto[], qtProduto[] e valorProduto[] : informações do BD
//-----------------------------------------------------
$(document).ready(function(){
  $(document).delegate(".codigoProduto", "blur", function() {
         var parent = $(this).parent();
         var nomeProduto = parent.children("input:eq(1)");
         var qtProduto = parent.children("input:eq(2)");
         var valorProduto = parent.children("input:eq(3)");

             $( nomeProduto ).val('Carregando...');
             $( qtProduto ).val('Carregando...');
             $( valorProduto ).val('Carregando...');

             $.getJSON(
                 'function.php',
                 { codProduto: $( this ).val() },
                 function( json ) 
                 {
                      $( nomeProduto ).val( json.nomeProduto );
                      $( qtProduto ).val("1");
                      $( valorProduto ).val( json.valorProduto);
                     }
             );
                      if(json.nomeProduto == null)
                      $( nomeProduto ).val( " " ); // caso não encontre o produto no banco não esta caindo nesta condição para zerar o campo.   
     });
});

The database query file function.php:

<?php
    /**
     * função que devolve em formato JSON os dados do cliente
     */
    function retorna( $nome, $db )
    {
        $sql = "SELECT `identProduto`, `codProduto`, `qtProduto`, `nomeProduto`, `valorProduto` FROM `t_estoque` WHERE `codProduto` = '{$nome}' ";

             $query = $db->query( $sql );

             $arr = Array();
             if( $query->num_rows )
             {
                 while( $dados = $query->fetch_object() )
                 {
                     $arr['nomeProduto'] = $dados->nomeProduto;
                     $arr['qtProduto'] = $dados->qtProduto;
                     $arr['valorProduto'] = $dados->valorProduto;
                 }
             }
             if($arr['qtProduto'] == 0){
                $arr['nomeProduto'] = 'sem estoque';
                $arr['qtProduto'] = '0';
             }
             return json_encode( $arr );
        }

    /* só se for enviado o parâmetro, que devolve os dados */
    if( isset($_GET['codProduto']) )
    {
        $db = new mysqli('localhost', 'root', '', 'buchm613_buchmann');
        echo retorna( filter ( $_GET['codProduto'] ), $db );
    }

    function filter( $var ){
        return $var;//a implementação desta, fica a cargo do leitor
    }
?>
  • 2

    Compares if it is equal to empty (" "), empty is different from null

  • @Rafaeldiassoares Hello, I tried this way too but it won’t, so I’m finding it strange... Any idea ?

  • In this case it is no different. Both result in false.

  • try if(json.productName == Undefined)

  • Browser console indicates an error?

  • @Rafaeldiassoareshad already tested with Undefined and was also no friend... :/

  • @Renan indicates no error, works ajax normally but does not clear input

  • 1

    Try @Rafaelassmann, give a console.log(json) and see what comes back when it finds nothing. Then you just validate.

  • @Can Thiagothaison give me an example of how I could use the.log(json) console in my code? Thanks!

  • 1

    Dude, I would try it this way: I would make my return ajax treat the statusCode If nothing returns (Cod. 204), I would just clear the form fields. If all goes well (Cod. 200) I would do another...

  • Guys, I still can’t find a solution so I can warn the user that the product is still in stock or that the product has not been found, @Joãomanolo como assim statusCode, can you post an example? thank you!

  • @Rafaelassmann I made some edits on the question, you can reverse if there are no improvements.

Show 7 more comments

2 answers

1

Your problem is where you put the condition. You have put out the request, and as the JS will run asynchronously, your condition runs before the return of your server.

To perform at the right time, you need to add the condition within the callback function. What would your call look like:

$.getJSON(
    'function.php',
    { codProduto: $( this ).val() },
    function( json ) 
    {
        $( nomeProduto ).val( json.nomeProduto );
        $( qtProduto ).val("1");
        $( valorProduto ).val( json.valorProduto);

        if(json.nomeProduto == null)
            $( nomeProduto ).val( "" );
    }
);
  • did not obtain result in this way friend :/

0

Try it this way

if(json.length < 1){
  $(nomeProduto).empty();
}

ou 

if(!json.nomeProduto){
  $(nomeProduto).empty();
}
  • Hello @vcrzy I tried to implement this way but did not succeed, I entered the IF in the same place as this in the question, you have more alternative?

  • hello Rafael, So I understand your goal is to locate the data in the database or clear the field if you can’t. If this is the case, you can add a Listener to the complete ajax event, triggering a function when the script is finished, this can check whether it was a success or a failure and determine what to do. The jQuery I believe you are using should provide this method for ajax calls, as well as two other methods, the Success and the error, so it is a matter of choosing how you will handle your output.

  • Remember that Success is triggered when it does not detect errors in the PHP request, if I can recommend it I would recommend returning a json with an empty list and would check it after the request is finished. I would avoid changing the HTTP code that is returned to avoid future problems, for example, switching to 404 if it does not find results in the future can mask the fact that the file has been deleted, and switching to another can mask future problems as well.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.