Поисковая служба с ajax не ищет

У меня есть маленькая проблема с поисковой службой, которую я делаю. Я искал информацию из-за нескольких сайтов и даже одеваю видео, чтобы видеть, где - неудача, но не могу увидеть это, так как он кажется совсем правильным. Я оставляю здесь код посмотрим кто-то находит, из-за которого он не ищет. Хотя по крайней мере он показывает все то, что есть в базе данных.

Здесь начнись JS:

$(obtener_registros());

function obtener_registros(usuarios){
	$.ajax({
		url : '../consultarBusqueda.php',
		type : 'POST',
		dataType : 'html',
		data : {usuarios: usuarios},
	})

	.done(function(resultado){
		$("#tabla_resultado").html(resultado);
	})
}

$(document).on('keyup', '#buscar', function(){
	var valorBusqueda = $(this).val();
	if (valorBusqueda != ""){
		obtener_registros(valorBusqueda);
	}else{
		obtener_registros();
	}
});
<!--Aquí empieza el html:-->

<section>
  <input type="text" name="buscar" id="buscar" class="form-control"   placeholder="Buscar...">
</section>
<br>			
<section id="tabla_resultado">
</section>

Здесь начнись php:

<?
  session_start();

  include("conexion.php");

  if(!isset($_SESSION["user"])){
    header("Location: index.php");
  }


  $tabla="";
  $sql = "SELECT * FROM usuarios ORDER BY nombre";

  if(isset($_POST['usuarios'])){
    $q = $conn->real_escape_string($_POST['usuarios']);
    echo $sql = "SELECT * FROM usuarios WHERE nombre LIKE '%".$q."%'";
  }

  $buscarUsuarios=$conn->query($sql);
  if ($buscarUsuarios->num_rows > 0)
  {
    $tabla.= 
    '<table class="table">
      <tr class="bg-warning">
        <td>NOMBRE</td>
        <td>EMAIL</td>
        <td>PASSWORD</td>
              <td>FECHA NACIMIENTO</td>
              <td>País</td>
      </tr>';

    while($fila = $buscarUsuarios->fetch_assoc())
    {
      $tabla.=
      '<tr>
        <td>'.utf8_encode($fila['nombre']).'</td>
        <td>'.$fila['email'].'</td>
        <td>'.$fila['password'].'</td>
              <td>'.$fila['fecha_nac'].'</td>
              <td>'.utf8_encode($fila['Pais']).'</td>
       </tr>
      ';
    }

    $tabla.='</table>';
  } else
    {
      $tabla="No se encontraron coincidencias.";
    }


  echo $tabla;
?>

Как я то, что должно бить козырем меня, что-то из keyup, так как единственное, что он делает, состоит в том, чтобы показывать общие данные, и ничего не перемещать из-за с $_POST и поэтому ему не удается произойти внутри if и делать поиски.

1
задан 27.11.2019, 14:01
1 ответ

EstГЎs объявляя твой query:

$sql = "SELECT * FROM usuarios ORDER BY nombre";

, И если он приходит parГЎmetro, ты не повторно объявляешь ее но ты пишешь ее с echo:

if(isset(

EstГЎs объявляя твой query:

[110]

, И если он приходит parГЎmetro, ты не повторно объявляешь ее но ты пишешь ее с echo:

[111]

Так что ты всегда выполняешь первую, без фильтра.

Bonus track

Yo то, что я вижу, состоит в том, что у тебя есть race condition . Ты сгибаешь так называемый ajax в каждом неударе в лунку, и если ты набиваешь баллады, они начинают быть приклеенными N названные.

ты Был должен делать вид debounce, чтобы навязывать паузу между вызовами.

var timeoutID=null;
$(document).on('keyup', '#buscar', function(){
  var valorBusqueda = $(this).val();
  clearTimeout(timeoutID); // Si hay un llamado en curso, lo cancelo

  timeoutID=setTimeout(function() { // agendo un nuevo llamado en 2s
    if (valorBusqueda != ""){
        obtener_registros(valorBusqueda);
    }else{
        obtener_registros();
    }
  },2000);
});

(в строгости это было должно делаться отменяя request..., но мы идем из-за чего-то простого)

function mockAjax(usuarios) {
  return new Promise((resolve, reject) => {
    window.setTimeout(() => {
      resolve(`<div>Se buscó <b>${usuarios}</b></div>`);
    }, 1500);
  });
}


function obtener_registros(usuarios) {
  usuarios = usuarios || 'Todos los usuarios';
  $("#proceso").text(`Ejecutando búsqueda: ${usuarios}`);
  mockAjax(usuarios)
    .then((result) => {
      $("#tabla_resultado").prepend(result);
      $("#proceso").empty();
    });
}
obtener_registros();
$(document).on('keyup', '#buscar', function() {
  var valorBusqueda = $(this).val();
  if (valorBusqueda != "") {
    obtener_registros(valorBusqueda);
  } else {
    obtener_registros();
  }
});
var timeoutID = null;
$(document).on('keyup', '#buscar_debounced', function() {
  var valorBusqueda = $(this).val(),
      usuarios = valorBusqueda || 'Todos los usuarios';
  $("#proceso").text(`Se agenda búsqueda de: ${usuarios}`);
  clearTimeout(timeoutID);
  timeoutID = setTimeout(function() {
    if (valorBusqueda != "") {
      obtener_registros(valorBusqueda);
    } else {
      obtener_registros();
    }
  }, 1000);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Búsqueda
<section>
<label for="buscar">Normal:
  <input type="text" name="buscar" id="buscar" class="form-control" placeholder="Buscar..."></label>
  <label for="buscar">Con delay:
  <input type="text" name="buscar_debounced" id="buscar_debounced" class="form-control" placeholder="Buscar con delay...">
  </label>
  <br>
  <small id="proceso"></small>
</section>
<br>
<section id="tabla_resultado">
</section>
POST['usuarios'])){ $q = $conn->real_escape_string(

EstГЎs объявляя твой query:

[110]

, И если он приходит parГЎmetro, ты не повторно объявляешь ее но ты пишешь ее с echo:

[111]

Так что ты всегда выполняешь первую, без фильтра.

Bonus track

Yo то, что я вижу, состоит в том, что у тебя есть race condition . Ты сгибаешь так называемый ajax в каждом неударе в лунку, и если ты набиваешь баллады, они начинают быть приклеенными N названные.

ты Был должен делать вид debounce, чтобы навязывать паузу между вызовами.

var timeoutID=null;
$(document).on('keyup', '#buscar', function(){
  var valorBusqueda = $(this).val();
  clearTimeout(timeoutID); // Si hay un llamado en curso, lo cancelo

  timeoutID=setTimeout(function() { // agendo un nuevo llamado en 2s
    if (valorBusqueda != ""){
        obtener_registros(valorBusqueda);
    }else{
        obtener_registros();
    }
  },2000);
});

(в строгости это было должно делаться отменяя request..., но мы идем из-за чего-то простого)

function mockAjax(usuarios) {
  return new Promise((resolve, reject) => {
    window.setTimeout(() => {
      resolve(`<div>Se buscó <b>${usuarios}</b></div>`);
    }, 1500);
  });
}


function obtener_registros(usuarios) {
  usuarios = usuarios || 'Todos los usuarios';
  $("#proceso").text(`Ejecutando búsqueda: ${usuarios}`);
  mockAjax(usuarios)
    .then((result) => {
      $("#tabla_resultado").prepend(result);
      $("#proceso").empty();
    });
}
obtener_registros();
$(document).on('keyup', '#buscar', function() {
  var valorBusqueda = $(this).val();
  if (valorBusqueda != "") {
    obtener_registros(valorBusqueda);
  } else {
    obtener_registros();
  }
});
var timeoutID = null;
$(document).on('keyup', '#buscar_debounced', function() {
  var valorBusqueda = $(this).val(),
      usuarios = valorBusqueda || 'Todos los usuarios';
  $("#proceso").text(`Se agenda búsqueda de: ${usuarios}`);
  clearTimeout(timeoutID);
  timeoutID = setTimeout(function() {
    if (valorBusqueda != "") {
      obtener_registros(valorBusqueda);
    } else {
      obtener_registros();
    }
  }, 1000);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Búsqueda
<section>
<label for="buscar">Normal:
  <input type="text" name="buscar" id="buscar" class="form-control" placeholder="Buscar..."></label>
  <label for="buscar">Con delay:
  <input type="text" name="buscar_debounced" id="buscar_debounced" class="form-control" placeholder="Buscar con delay...">
  </label>
  <br>
  <small id="proceso"></small>
</section>
<br>
<section id="tabla_resultado">
</section>
POST['usuarios']); echo $sql = "SELECT * FROM usuarios WHERE nombre LIKE '%".$q."%'"; }

Так что ты всегда выполняешь первую, без фильтра.

Bonus track

Yo то, что я вижу, состоит в том, что у тебя есть race condition . Ты сгибаешь так называемый ajax в каждом неударе в лунку, и если ты набиваешь баллады, они начинают быть приклеенными N названные.

ты Был должен делать вид debounce, чтобы навязывать паузу между вызовами.

var timeoutID=null;
$(document).on('keyup', '#buscar', function(){
  var valorBusqueda = $(this).val();
  clearTimeout(timeoutID); // Si hay un llamado en curso, lo cancelo

  timeoutID=setTimeout(function() { // agendo un nuevo llamado en 2s
    if (valorBusqueda != ""){
        obtener_registros(valorBusqueda);
    }else{
        obtener_registros();
    }
  },2000);
});

(в строгости это было должно делаться отменяя request..., но мы идем из-за чего-то простого)

function mockAjax(usuarios) {
  return new Promise((resolve, reject) => {
    window.setTimeout(() => {
      resolve(`<div>Se buscó <b>${usuarios}</b></div>`);
    }, 1500);
  });
}


function obtener_registros(usuarios) {
  usuarios = usuarios || 'Todos los usuarios';
  $("#proceso").text(`Ejecutando búsqueda: ${usuarios}`);
  mockAjax(usuarios)
    .then((result) => {
      $("#tabla_resultado").prepend(result);
      $("#proceso").empty();
    });
}
obtener_registros();
$(document).on('keyup', '#buscar', function() {
  var valorBusqueda = $(this).val();
  if (valorBusqueda != "") {
    obtener_registros(valorBusqueda);
  } else {
    obtener_registros();
  }
});
var timeoutID = null;
$(document).on('keyup', '#buscar_debounced', function() {
  var valorBusqueda = $(this).val(),
      usuarios = valorBusqueda || 'Todos los usuarios';
  $("#proceso").text(`Se agenda búsqueda de: ${usuarios}`);
  clearTimeout(timeoutID);
  timeoutID = setTimeout(function() {
    if (valorBusqueda != "") {
      obtener_registros(valorBusqueda);
    } else {
      obtener_registros();
    }
  }, 1000);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Búsqueda
<section>
<label for="buscar">Normal:
  <input type="text" name="buscar" id="buscar" class="form-control" placeholder="Buscar..."></label>
  <label for="buscar">Con delay:
  <input type="text" name="buscar_debounced" id="buscar_debounced" class="form-control" placeholder="Buscar con delay...">
  </label>
  <br>
  <small id="proceso"></small>
</section>
<br>
<section id="tabla_resultado">
</section>
2
ответ дан 01.12.2019, 10:47
  • 1
    Точно это было этим, спасибо за помощь, он подал меня много. – Lorenzo 28.11.2019, 11:05

Теги

Похожие вопросы