Hola forer@s
hice un buscador de productos, pero lo hace autocompletando.
Programe una funcion en el onKeyUp de una caja de texto y llama a a funcion requestj
Código Javascript
:
Ver originalfunction ajax(){
var ajax = null;
if (window.XMLHttpRequest){
try{
ajax = new XMLHttpRequest();
}
catch(e) {}
}
else if (window.ActiveXObject){
try{
ajax = new ActiveXObject("Msxm12.XMLHTTP");
}
catch (e){
try{
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
return ajax;
}
var myAjax2 = ajax();
function requestj(str) {
myAjax2.open("POST", "ajax_entrada.php"); // nodos
myAjax2.onreadystatechange = resultj_update;
myAjax2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
myAjax2.send("search="+str);
}
function resultj_update(){
if (myAjax2.readyState == 4) {
//alert(myAjax2.status);
if (myAjax2.status==200){
var liste = myAjax2.responseText;
document.getElementById("tag_update").innerHTML = liste;
document.getElementById("tag_update").style.display = "block";
}
}else{
if (myAjax2.status==200){
document.getElementById("tag_update").innerHTML = 'Buscando...';
document.getElementById("tag_update").style.display = "block";
}
}
}
Primer el mensaje 'buscando...' nunca aparece
Oprimo una tecla y no sale nada, despues de mas o menos 30 segundo o 1 minuto aparece la lista con los resultados
este es mi archivo ajax_entrada.php
Código PHP:
Ver original<?php
require_once('conf.php');
$b=new subbase(IPSERVIDORBD,USUARIOBD,CLAVEBD,BD);
if (isset($_POST['search'])){ }else{
$search ='';
}
$sql = "SELECT p.products_id, COALESCE(p.products_name,'Sin descripcion') AS products_name, t.tax_rate, COALESCE(c.average_cost,0) * (t.tax_rate / 100) AS iva FROM products_description p LEFT JOIN products pc ON pc.products_id = p.products_id LEFT JOIN tax_class tc ON tc.tax_class_id = pc.products_tax_class_id LEFT JOIN tax_rates t ON tc.tax_class_id = t.tax_class_id LEFT JOIN centro_costo_stock c ON p.products_id = c.id_product WHERE p.products_name LIKE '%".$search."%' GROUP BY p.products_id ORDER BY p.products_name LIMIT 0,20";
if ($tabla=$b->sub_tuplas($sql)){
echo '<ul><li><a href="#"><img src="images/close.png" alt="cerrar" title="cerrar" onclick="document.getElementById('tag_update').innerHTML = ''"/></a></li>';
foreach ($tabla as $fila){
}
echo '</ul>';
}
$b->cerrar_conexion();
La tabla products tiene mas de 5000 registros, por eso envio un limit para que no me traiga todo lo que encuentra, si no los primeros 20...
Mi error puede estar en la consulta???? o es error en la forma en que hago el llamado asincrono???
No pido que me hagan la consulta ni nada de eso, solo que me aconsejen un poco ya que nunca he trabajado con tantos datos, Muchas Gracias