AJAX no se ejecuta con elemento con href indicado

publicado por: Anonymous

Buenas,

Estoy usando un pequeño script para que se me actualice la base de datos cuando hago click en un enlace. Ese enlace tiene un evento onclick. Al principio para ver los valores que me estaba dando en la consola, no tenía puesto ningún enlace. Una vez visto que funcionaba, al poner el enlace, algo pasa, puesto que no se modifica la base de datos.

El código HTML referente al enlace:

echo "<a rel='nofollow' onclick='leido(" . $id_mencion . ")' href='foro.php?foro=" . $mencion['foro'] . "&subforo=" . $mencion['subforo'] . "&hilo=" . str_replace(" ", "%",$informacion_hilo[0]['asunto']) . "&ID=" . $id_hilo . "&pagina=" . $mencion['pagina_hilo'] . "'><strong>" . $informacion_hilo[0]['asunto'] . "</strong></a>";

El Script:

<script>
function leido(respuesta_id) {
 var id_respuesta = respuesta_id;
 console.log(id_respuesta);

    $.ajax ({
      type: 'POST',
      url: 'process_leido.php',
      data: { "id_respuesta":id_respuesta }
    });

};
</script>

También pongo el código de process_leido.php:

<?php

session_start();

require 'admin/config.php';

try {
   $conexion = new PDO($bd_config['dbname'], $bd_config['usuario'], $bd_config['password'] );
} catch (Exception $e) {
   echo "Error: " . $e->getMessage();
}

$id = isset($_POST['id_respuesta'])? $_POST['id_respuesta'] : 0;

$statement = $conexion->prepare("UPDATE menciones SET leido = 1 WHERE id = :id");
$statement->execute(array(":id" => $id));


?>

Sin embargo, si modifico el enlace a y le quito el contenido del parámetro href sí que funciona:

echo "<a rel='nofollow' onclick='leido(" . $id_mencion . ")' href='#'><strong>" . $informacion_hilo[0]['asunto'] . "</strong></a>";

He mirado y remirado y no veo dónde está el error. De hecho, el enlace es correcto.

EDITO:

Este es el HTML que me genera PHP:

<div class="info_hilo">
    <a rel="nofollow" onclick="leido(16)" href="foro.php?foro=Xbox%One&subforo=General&hilo=Primer%trailer%oficial%de%Destiny%2&ID=45&pagina=0"><strong>Primer trailer oficial de Destiny 2</strong></a>                                       
    <p class="creador">GoitxoCv</p>
</div>

solución

El comportamiento de un anchor (a) en un documento HTML es redirigir el navegador al recurso que apunte.
Como estás apuntando a una dirección, el navegador va a redirigirse obedeciendo dicho a.

Para evitar esto, usa preventDefault de jQuery:

Html:

echo "<a rel='nofollow' onclick='leido(event, "" . $id_mencion . "")'...>"

JS:

leido = function(e, respuesta_id){
    e.preventDefault();
    ...
}

EDIT

Para redirigir el navegador solo tienes que incluir un location.href cuando el ajax haya devuelto un resultado exitoso:

$.ajax ({
    type: 'POST',
    url: 'process_leido.php',
    data: { "id_respuesta":id_respuesta },
    // A partir de aquí
    success: function(data){
        location.href = '<? echo "foro.php?foro=" . $mencion['foro'] . "&subforo=" . $mencion['subforo'] . "&hilo=" . str_replace(" ", "%",$informacion_hilo[0]['asunto']) . "&ID=" . $id_hilo . "&pagina=" . $mencion['pagina_hilo']" ?>';
    },
    error: function(err){
        console.log(err); //  O cualquier cause que quieras dar
                          //   en caso de que el AJAX fracase
    }
});
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *