entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

Porque tengo que hacer touch varias veces al botón para que se borre?

Buenas a todos, nuevamente con un enigma en la cual no se porque no se borrar de una el registro al apretar el botón de delete, ayer me pase toda la noche tratando de ver y no he conseguido arreglarlo, busque en el internet pero en realidad me enrede mas..
Intento borrar un registro tengo que clickarle varias veces y algunas veces actualizar la pagina para que recién desaparezca de la lista. Me imagino que el problema viene de que no conecta a la base de datos mySql? y porque otras veces si la borra pero al hacer update a la pagina desaparece, siendo que este proceso esta en código. Quería hacer ademas un pedido de que si ustedes serian tan amables de poder hacer en el php o en el jquery una ventana flotante que me pregunte antes si lo quiera borrar o no.

acá les dejo el código:

----------------------------------------------------- jQuery -----------------------------------------------------

var onswipe = false;
  $('td').swipe({
    swipeRight:function(){
      if(!onswipe){
        onswipe = true;
        $(this).prepend('<tecla>delete</tecla>');
        $('tecla').addClass('boton_borrar');
          $(".boton_borrar").touchstart(function(){

    htmlcaja = $(this).parent().children("caja").html();
    desde = htmlcaja.indexOf("</span>") + "</span>".length;
    hasta = htmlcaja.indexOf("<br"); 
    valueid = htmlcaja.substring(desde,hasta).replace(/ /g,'');

      $.post("http://waybill.hyeride.com/delete.php", { "valueid" : valueid });
      location.reload("http://waybill.hyeride.com/#listwaybill");

     });

      }else{
        $('tecla').remove();
        onswipe = false;
      }
    }
  });

----------------------------------------------------- delete.php -----------------------------------------------------

<?php

   include("conexion/conexion.php");

?>
<?php   
   $id = $_POST['valueid'];
   mysql_query("DELETE FROM waybill WHERE id='$id'") or die ("connection error". mysql_error());
?>

Importante: este problema pasa mas que nada en los dispositivos móviles (yo tengo usando el browser Safari) y en los Browser de una computadora el problema que los he comentado es gradualmente menor. y ademas recordarles que el botón de delete solo hace caso en las pantallas móviles con pantallas táctiles para hacerle touch ya que esta con la sentencia jquery touchstart ( $(".boton_borrar").touchstart)

Desde ya quiero agradecer a la gente que se copa en ayudar... Gracias!

1 Respuesta

1voto

Leonardo-Tadei Puntos227020

Hola Chirola30,

sin poder debuguear tu código no se pueden afirmar muchas cosas, pero en este caso lo más probable que te esté pasando es que hacés la llamada

$.post("http://waybill.hyeride.com/delete.php", { "valueid" : valueid });

de forma asincrónica, con lo que la línea siguiente:

location.reload("http://waybill.hyeride.com/#listwaybill");

se ejecuta antes de que se complete la petición de borrado, con lo que la página se recarga cuando todavía existe el registro a borrar.

Luego, también pued estarte jugando en cotnra la caché del navegador, ya que la llamada a recargar es siempre idéntica, es posible que el navegador te la muestre de la caché local.

Esto se soluciona de varias maneras: haciendo la llamada AJAX sincrónica; haciendo la llamada asincrónica pero disparando la recarga de la página en su callback de respuesta; parametrizando la recarga de la página con un valor al azar para esquivar la caché o con las directivas HTML no-cache en la página.

Ahora bien, si me permitís una opinión personal, tu código es mucho más complejo de las técnicas de programación que dominás en este momento respecto al entorno web y el protocolo HTTP, y por esto te encontrás con tantos problemas. Por ejemplo hacer una llamada AJAX para luego recargar la página completa no tiene sentido! La idea de AJAX es justamente poder recargar solo una parte de la página para ahorrarte el costo y tiempo de retransmitirla por completo.

Yo te sugiero que simplifiques tu código de esta manera:

1) Hacé que la página http://waybill.hyeride.com/#listwaybill ya tenga el botón delete contenido en un formulario tradicional en un DIV que se mantiene oculto.

<div id="del_el_id_del_registro">
  Realmente desea borrar este registro?<br />
   <form action="http://waybill.hyeride.com/#listwaybill">
      <input type="hidden" name="id" value="el_id_del_registro" />
      <input type="submit" name="Borrar" value="delete" />
   </form>
</div>

No lo generes dinámicamente con JavaScript, sino que hacé que sea parte del código que genera esta página.

2) en el evento de dezplazamiento del mouse, hacé visible el DIV: para esto solo basta con cambiarle las propiedades CSS de visibilidad. Con esto también solucionás la confirmación de borrado usando simplemente confirm() en JavaScript.

3) pasá el código del actual delete.php para que esté en http://waybill.hyeride.com/#listwaybill con un condicional, para que se ejecute solo si el botón de borrar fue presionado.

4) por el comportamiento natural el protocolo HTTP, el botón envía la petición de recarga de la página pasando como parámetro el registro a borrar, se borra el registro, y al recargarse la página siempre verás la versión actual.

Con esto el uso de JavaScript es mínimo, no hay AJAX de por medio y el comportamiento de la página es exactamente igual al actual, ya que estás recargando la página completa.

Creo que esto te permitirá comprender mejor cómo funcionan las peticiones HTTP, ya sean GET o POST, te dará más solidez en la lógica de las aplicaciones y tendrás una mejor base para el próximo proyecto en el que podrás ir agregando técnicas más complejas.

Saludos cordiales!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta