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
}
?>
Compares if it is equal to empty (" "), empty is different from null
– Rafael Dias Soares
@Rafaeldiassoares Hello, I tried this way too but it won’t, so I’m finding it strange... Any idea ?
– Rafael Assmann
In this case it is no different. Both result in false.
– Franchesco
try if(json.productName == Undefined)
– Rafael Dias Soares
Browser console indicates an error?
– Oralista de Sistemas
@Rafaeldiassoareshad already tested with Undefined and was also no friend... :/
– Rafael Assmann
@Renan indicates no error, works ajax normally but does not clear input
– Rafael Assmann
Try @Rafaelassmann, give a console.log(json) and see what comes back when it finds nothing. Then you just validate.
– Thiago Thaison
@Can Thiagothaison give me an example of how I could use the.log(json) console in my code? Thanks!
– Rafael Assmann
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...– João Manolo
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!
– Rafael Assmann
@Rafaelassmann I made some edits on the question, you can reverse if there are no improvements.
– Renan Gomes