Esta es de las cosas que aprendo gracias a mi trabajo. Y resulta ser algo muy cool, les muestro: En este demo luego de activar el checkbox de pjax (si no están en internet explorer) -que asumo que no, para no enojarme apuff-. Pueden navegar por la página sin que esta haga refresh nunca. Nunca. Jamás. Y lo mejor es que el atrás, adelante e historial de su navegador sigue funcional.
Me explico si aún no ven la maravilla; esto es poder usar ajax en toda su web permitiendo navegar entre contenidos de diferentes urls con acciones de back y forward. En pocas palabras PushState + Ajax = pjax.
Para usar pjax en Django necesitan:
Sigan los pasos del setup y si tienen alguna duda, respondo en comentarios; pues la idea no es traducir tutoriales.
Hasta ahora todo suena bien hasta que se presenta el envío de un formulario por get. El truco está en que realmente no se hará nunca un submit como tal. Más bien se imita el submit de un form por get, que básicamente es el envío de datos por url -que gracias a pjax es posible-. Así:
$('#form-id').on('submit', function(e){
e.preventDefault();
$.pjax({
url: $(this).attr('action') + '?' + $(this).serialize(),
container: '#pjax-container-id'
});
});
El serialize de jQuery retorna los datos de la forma listos para el url y es todo
.
Dentro de los posibles problemas que se pueden presentar está que el action que le definan a la forma no sea la url exacta que usa Django para procesar esta vista; por ejemplo la falta del slash al final de la url puede generar una redirección y esto ocasiona múltiples procesos pjax al tiempo.
Para hacer debug de pjax simplemente agreguen esto a los parámetros:
error: function(e, xhr, err){
alert('Error: ' + err);
}
Para todo lo demás están los comments
.
Jack White – Love Interruption












