Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite.
Estou trabalhando com
window.history.replaceState('Object', 'Title', destination);
para alterar a url sem atualizar a página. Até ai tudo ok. Agora a dúvida que surgiu é, como ler o novo valor de um parâmetro que foi alterado?
Por exemplo:
Utilizo a função a baixo para utilizar o $_GET na minha url com o jquery
var $_GET = {};
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
function decode(s) {
return decodeURIComponent(s.split("+").join(" "));
}
$_GET[decode(arguments[1])] = decode(arguments[2]);
});
Porém quando troco a url, o que está funcionando muito bem, minhas demais funções não funcionam. Pra funcionar preciso atualizar a página, o que não é o objetivo nesse caso.
Exemplo:
// Open overlay [insert-new]
if($_GET['action'] == 'insert-new'){
$('.overlay').slideDown();
}
Se atualizar, executa, se não, nada acontece.
O php nunca será chamado, pois a página não foi para o backend.
Esse mesmo teste vc pode fazer com JavaScript client-side, e não com php. Entendeu ?
Oi Willian. É tudo javascript, não tem php.
O $_GET vem da função lá na primeira postagem, ele funciona, mas só se atualizar a página.
Eu preciso que ele funcione em realtime. Alterei a url, quero que ele continue disparando os eventos e checando as funções, mas isso não acontece de jeito nenhum.
Ah tá.. então, vc precisa executar aquilo no momento em que troca a URL.
Não existe um evento para te avisar que a URL foi alterada.
@NerdMonkey
Com a função window.location.href você consegue resgatar o valor atualizado:
window.history.replaceState( {} , 'testUrl', '/testUrl?teste1=1&test2=2&test3=3' );
console.log(window.location.href)Vlw pela ajuda de todos. Consegui resolver assim:
$('.actions').on('click', 'a', function(e){
e.preventDefault();
var destination = ($(this).attr('href'));
window.history.replaceState([], 'Controle de registros', destination);
$('.asides p').removeClass('opening');
$('.asides ul').slideUp();
var explode = destination.split('&'),
explode0 = explode[1].split('=');
// Open overlay [insert-new]
if(explode0[1] == 'insert-new'){
$('.overlay').slideDown();
}
});
Mas que coisa complicada. Não estou sabendo manipular o DOM aqui pra persistir minha funções. Vou por o exemplo da URL pra vocês entenderem melhor o que estou fazendo.
adm?show=list-main&action=insert-new
Enquanto a url acima existir no endereço do navegador, deveria executar a função abaixo
// Open overlay [insert-new]