tengo la siguiente aplicación de prueba: http://dev.driz.co.uk/ajax/Utilizando los botones de avance y retroceso con la API Historia
Puede hacer clic en los enlaces para cargar en otras páginas usando jQuery AJAX y hay dos tipos, globalTabs y localTabs que se cargan en contenido en diferentes paneles. NOTA: Que cada página es en realidad la página completa, pero solo tomamos el contenido que queremos utilizando el método jQuery find.
Para mejorar esto, estoy usando la API de historial de HTML5 (History.js para navegador cruzado).
Los títulos y las URL cambian bien y la pila del historial se está presionando para que funcione correctamente y, cuando uso los botones para avanzar y retroceder, la URL y el título se revierten.
Ahora la parte complicada es volver a cargar el contenido desde el estado anterior y más complicado cargar el tipo correcto, p. ajax global o local. Para lograr esto, creo que necesito pasar TANTO los datos y el tipo al estado de inserción para que pueda reutilizarse nuevamente para el estado emergente ...
¿Alguien puede ayudarme a orientarme en la dirección correcta? Tengo todas las primeras partes funcionando, solo un caso de pasar este tipo de ajax al estado push y luego reutilizarlo con el cambio de estado emergente.
Para mejorar esto que volver a escribir como sigue para indicar mi plan para pasar el tipo y datos:
NOTA: la Historia en mayúsculas se debe a que estoy usando History.js
var App = {
init: function() {
$(document).ready(function() {
$('.globalTabs li a').live('click', function (e) {
e.preventDefault();
App.globalLoad($(this).attr('href'));
});
$('.localTabs li a').live('click', function (e) {
e.preventDefault();
App.localLoad($(this).attr('href'));
});
});
window.addEventListener('popstate', function(event) {
// Load correct content and call correct ajax request...
});
},
localLoad: function (url) {
$.ajax({
url: url,
success: function (responseHtml) {
$('.localContent').html($(responseHtml).find('#localHtml'));
$data = { $(responseHtml).find('#localHtml'), 'local'};
History.pushState($data, $(responseHtml).filter('title').text(), url);
}
});
},
globalLoad: function (url) {
$.ajax({
url: url,
success: function (responseHtml) {
$('.mainContent').html($(responseHtml).find('#globalHtml'));
$data = { $(responseHtml).find('#globalHtml'), 'global'};
History.pushState($data, $(responseHtml).filter('title').text(), url);
}
});
}
};
App.init();
ACTUALIZACIÓN: Para aclarar esta pregunta, son dos problemas con los que busco ayuda.
1.) Obtiene los botones de retroceso y avance que funcionan con las solicitudes ajax para que carguen los datos correctos en el área de contenido.
2.) Cargando el contenido en el área correcta al pasar también el contenido con el método pushState para que sepa si es una div global o una solicitud div local.
¿Y cómo lo disparo entonces? ¿No mencionas popstate? Como lo que tengo que hacer es cambiar el contenido y luego titular (efectivamente replicando EXACTAMENTE lo que hizo la llamada ajax) cuando un usuario usa los botones hacia atrás y hacia adelante, pero en lugar de ajax usará los datos del historial como punto sin volver a cargarlo en obviamente. – Cameron
También me aparece el error: 'TypeError no detectado: conversión de la estructura circular a JSON' ¿Alguna idea de lo que está mal? http://dev.driz.co.uk/ajax/ – Cameron
edité mi respuesta, sobre el error json, solo asegúrate de pasar objetos simples, sin funciones – cuzzea