Foros del Web » Programando para Internet » Javascript »

cambiar de urls sin que recargue el navegador y conservando información.

Estas en el tema de cambiar de urls sin que recargue el navegador y conservando información. en el foro de Javascript en Foros del Web. Buenos días. Tengo una lista de artículos de vídeos. Los vídeos los tengo listados con paginación infinita y cuando pincho en un vídeo, este me ...
  #1 (permalink)  
Antiguo 05/06/2017, 19:23
 
Fecha de Ingreso: julio-2009
Mensajes: 172
Antigüedad: 14 años, 9 meses
Puntos: 3
cambiar de urls sin que recargue el navegador y conservando información.

Buenos días.

Tengo una lista de artículos de vídeos. Los vídeos los tengo listados con paginación infinita y cuando pincho en un vídeo, este me lleva a la url del vídeo de forma que pierdo el hilo de la páginación infinita. Esto causa frustración ya que cuando vuelves atrás debes empezar de nuevo a paginar.

Probé ha crear una ventana modal con un trozo de código que encontré por ahí para mostrar el vídeo sin que el usuario pierda la paginación pero claro, pierdo la url del vídeo.

Me he liado ha hacer chapuzas con cookies y de mas historias pero he leído que con javascript o ajax de javascript se puede crear transiciones entre distintas URL de una página web con efectos sin necesidad de recargar la página y evitar así perder la información.
Con este lenguaje ando algo perdido por lo que si alguien me puede orientar al respecto.

Básicamente y perdonarme si sueno bruto al explicar lo que quiero conseguir; cambiar de /categoria a /video como si fuese un efecto de hash #pagina1 a #pagina2 sin perder la información de lo generado en la primera página.

¿Se puede hacer o es una locura?
  #2 (permalink)  
Antiguo 05/06/2017, 21:44
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: cambiar de urls sin que recargue el navegador y conservando información.

Consulta, por que te molesta volver a paginar?
  #3 (permalink)  
Antiguo 06/06/2017, 05:35
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: cambiar de urls sin que recargue el navegador y conservando información.

Primeramente no es tanto lio tu problema, se pùede resolver con jquery y quiza ajax.
Segundo: muestra algo de codigo para poder ayudarte, es decir, como estan confoprmados los enlaces y que data poseen, para poder determinar el bloque de codigo a escribir y com interactuar con estos, en todo caso la idea del modal es buena siempre que sepas como armar los enlaces y el codigo js que se encargara de la tarea
__________________
[email protected]
HITCEL
  #4 (permalink)  
Antiguo 06/06/2017, 11:49
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: cambiar de urls sin que recargue el navegador y conservando información.

Utiliza el método .pushState() para cambiar la URL sin recargar el navegador, mientras que cambias el contenido con una petición asíncrona (AJAX). Lo mejor de todo es que no es necesario el uso de librerías para hacer esto.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 06/06/2017, 14:06
 
Fecha de Ingreso: julio-2009
Mensajes: 172
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: cambiar de urls sin que recargue el navegador y conservando información.

Las respuestas me llevaron hasta este código que encontré.

Código HTML:
<div class="container">
    <div class="row">
        <ul class="nav navbar-nav">
            <li><a href="index.html" class="historyAPI">Home</a></li>
            <li><a href="index2.html" class="historyAPI">About</a></li>
            <li><a href="index3.html" class="historyAPI">Contact</a></li>
        </ul>
    </div>
    <div class="row">
        <div class="col-md-6">
            <div class="well">
                Click on Links above to see history API usage using <code>pushState</code> method. asdfasdf
            </div>
        </div>
        <div class="row">    
            <div class="jumbotron" id="contentHolder">
                <h1>Home!</h1>
                <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p>
            </div>
        </div>
    </div>
</div>

<script type="text/javascript">
    jQuery('document').ready(function(){
         
        jQuery('.historyAPI').on('click', function(e){
            e.preventDefault();
            var href = $(this).attr('href');
             
            // Getting Content
            getContent(href, true);
             
            jQuery('.historyAPI').removeClass('active');
            $(this).addClass('active');
        });
         
    });
     
    // Adding popstate event listener to handle browser back button  
    window.addEventListener("popstate", function(e) {
         
        // Get State value using e.state
        getContent(location.pathname, false);
    });
     
    function getContent(url, addEntry) {
        $.get(url)
        .done(function( data ) {
             
            // Updating Content on Page
            $('#contentHolder').html(data);
             
            if(addEntry == true) {
                // Add History Entry using pushState
                history.pushState(null, null, url); 
            }
             
        });
    }
</script> 
Lo he investigado un poco y he leido sobre el tema y entiendo que aquí ( history.pushState(null, null, url); ) puedo jugar con el historial del navegador y que en teoría en la capa con id contentHolder será lo único que modificara al cargar la página y el resto quedará intacto. Pero vamos que no consigo ponerlo en marcha.

He creado tres index con contenido distintio dentro de esta capa y fuera confiando que recargase solo la capa contentHolder pero obviamente no tengo ni idea de que estoy haciendo.

Seguiré intentándolo y ya les comentaré.
  #6 (permalink)  
Antiguo 06/06/2017, 15:17
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: cambiar de urls sin que recargue el navegador y conservando información.

Si estás siguiendo ese ejemplo, necesitarás cargar la librería jQuery antes de ese bloque de código. Puedes conseguirlo en su página oficial.

Si no deseas usar librerías, puedes probar con este ejemplo:
Código Javascript:
Ver original
  1. document.addEventListener("DOMContentLoaded", function(){
  2.     this.addEventListener("click", function(e){
  3.         e.target.className == "historyAPI" && (function(event, link){
  4.             event.preventDefault();
  5.  
  6.             var href = link.href;
  7.  
  8.             getContent(href, true);
  9.  
  10.             document.querySelector(".historyAPI").classList.remove("active");
  11.             link.classList.add("active");
  12.         })(e, e.target);
  13.  
  14.         window.addEventListener("popstate", function(e){
  15.             getContent(location.pathname, false);
  16.         });
  17.  
  18.         function get(url){
  19.             return new Promise(function(done, fail){
  20.                 var xhr = new XMLHttpRequest();
  21.  
  22.                 xhr.open("GET", url, true);
  23.                 xhr.addEventListener("load", function(){
  24.                     this.status == 200 && done(this.responseText);
  25.                 }, false);
  26.                 xhr.send();
  27.             });
  28.         }
  29.  
  30.         function getContent(url, addEntry){
  31.             get(url)
  32.                 .then(function(data){
  33.                     document.querySelector("#contentHolder").innerHTML = data;
  34.  
  35.                     if (addEntry == true){
  36.                         history.pushState(null, null, url);
  37.                     }
  38.                 });
  39.         }
  40.     }, false);
  41. });

Puedes usarlo directamente como está, sin añadir librería alguna. Son unas cuantas líneas más de código, pero muchas menos que las miles que constituyen a jQuery.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: forma, navegador, url, urls
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:03.