6

¿Cómo "marcar" la página o el contenido obtenido con AJAX?¿Cómo "marcar" la página o el contenido que se obtiene usando AJAX?

Parece que puede ser fácil si simplemente agregamos los detalles al "anclaje" y luego usamos el enrutamiento o incluso el código PHP o Ruby on Rails's route.rb, para capturar esa parte, y luego mostrar el contenido o la página en consecuencia? (mostrar toda la página o contenido parcial)

¿Entonces puede ser muy simple? Parece que así es como Facebook lo hace. ¿Cuáles son otras buenas maneras de hacerlo?

Respuesta

1

Si usa jquery, puede hacerlo de una manera sencilla. solo use el complemento ajaxify. puede administrar marcadores de páginas ajax y muchas otras cosas.

7

Actualización: ahora existe la API de historial de HTML5 (pushState, popState) que desaprueba la funcionalidad de HTML4 hashchange. History.js proporciona compatibilidad entre navegadores y una reserva de optionalhashchange para navegadores HTML4.

Para almacenar el historial de una página, la forma más popular y con todas las funciones/compatibles es utilizando hashchanges. Esto significa que puede pasar de yoursite/page.html#page1 a yoursite/page.html#page2, puede realizar un seguimiento de ese cambio y, debido a que estamos utilizando hashes, puede seleccionarse mediante marcadores y botones de avance y retroceso.

puede encontrar una gran manera de unirse para discutir los cambios con el proyecto Historia jQuery http://www.balupton.com/projects/jquery-history

También hay una extensión de AJAX con todas las funciones por él, lo que le permite integrar fácilmente las peticiones Ajax a sus estados/hashes a Transforme su sitio web en una aplicación Web 2.0 con todas las funciones: http://www.balupton.com/projects/jquery-ajaxy

Ambos proporcionan gran documentación en sus páginas de demostración para explicar lo que está sucediendo y lo que está sucediendo.

Aquí es un ejemplo del uso de jQuery Historia (como tomado del sitio de demostración):

// Bind a handler for ALL hash/state changes 
$.History.bind(function(state){ 
    // Update the current element to indicate which state we are now on 
    $current.text('Our current state is: ['+state+']'); 
    // Update the page"s title with our current state on the end 
    document.title = document_title + ' | ' + state; 
}); 

// Bind a handler for state: apricots 
$.History.bind('/apricots',function(state){ 
    // Update Menu 
    updateMenu(state); 
    // Show apricots tab, hide the other tabs 
    $tabs.hide(); 
    $apricots.stop(true,true).fadeIn(200); 
}); 

Y un ejemplo de jQuery AJAXy (tomadas desde el sitio de demostración):

 'page': { 
      selector: '.ajaxy-page', 
      matches: /^\/pages\/?/, 
      request: function(){ 
       // Log what is happening 
       window.console.debug('$.Ajaxy.configure.Controllers.page.request', [this,arguments]); 
       // Adjust Menu 
       $menu.children('.active').removeClass('active'); 
       // Hide Content 
       $content.stop(true,true).fadeOut(400); 
       // Return true 
       return true; 
      }, 
      response: function(){ 
       // Prepare 
       var Ajaxy = $.Ajaxy; var data = this.State.Response.data; var state = this.state; 
       // Log what is happening 
       window.console.debug('$.Ajaxy.configure.Controllers.page.response', [this,arguments], data, state); 
       // Adjust Menu 
       $menu.children(':has(a[href*="'+state+'"])').addClass('active').siblings('.active').removeClass('active'); 
       // Show Content 
       var Action = this; 
       $content.html(data.content).fadeIn(400,function(){ 
        Action.documentReady($content); 
       }); 
       // Return true 
       return true; 

y si alguna vez desea obtener los parametros de cadena de consulta (por lo yoursite/page.html#page1?a.b=1&a.c=2) sólo puede utilizar:

$.History.bind(function(state){ 
    var params = state.queryStringToJSON(); // would give you back {a:{b:1,c:2}} 
} 

Así que echa un vistazo a esos enlaces de demostración para verlos en acción, y para todos los detalles de instalación y uso.

Cuestiones relacionadas