Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi pessoal, estou criando um site de E-commerce totalmente Ajax, ou seja, carrega uma vez a página com todo o conteúdo e depois só o que for pedido por métodos como Load, Post, Get via Jquery.
Vamos aos problemas:
Eu juntei todos os arquivos JS em um arquivo principal que contem praticamente chamadas Post e Get para o controlador que devolve o conteúdo a ser chamado. Ex: Clico em cadastrar usuario e uma função como essa
$('a#cadastro').click(function(e) {
e.preventDefault();
var url = $(this).attr("href");
$('#sub_c').load(url);
});
Faz a chamada do conteúdo a ser carregado (formulário com o cadastro). O problema é que após carregar essa div com esse formulário ou qualquer outro conteúdo, o JS que foi carregado antes deixa de funcionar nessa DIV com o conteúdo carregado por Ajax. Logo como faço para não precisar carregar novamente o JS, sendo que ele já foi carregado antes e não mudei de página, apenas fiz uma chamada Ajax.
Enquanto não resolvi esse problema, eu tive que adicionar o JS em todo sub pagina, assim o JS funciona nela, mas apareceu outro problema. A primeira vez, carregava a pagina + JS, depois que clico de novo no link carrega a pagina + js + js e vai aumentando a cada clique o carregamento do JS, alguém tem ideia de qual seria o problema e como resolver. Claro que se conseguir só chamar uma vez o JS na página principal, esse problema é resolvido automaticamente.
E o outro problema que resolvi:
$(window).bind("popstate", function(e){
$("#conteudo").load(location.pathname);
});
Ela basicamente serve para armazenar o histórico dos sites, ou seja, ao voltar ou avançar carrega a pagina.
O problema é que a primeira vez que carrego o site, ele carrega 2 vezes a página.
Consegui resolver esse primeiro problema, com o seguinte código
$(window).unbind('popstate');
$(window).bind('popstate', function () {
var popped = ('state' in window.history),
initialURL = location.href
$(window).bind('popstate', function (event) {
// Ignore inital popstate that some browsers fire on page load
var initialPop = !popped && location.href == initialURL;
popped = true;
if (initialPop) return;
$("#conteudo").load(location.pathname);
});Carregando comentários...