Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde galerinha do mal,
Venho incomodar vocês +1x sobre a criação de urls amigaveis com sites em AJAX... Após muitas pesquisas, acabei sendo levado a trabalhar com o método pushState() apesar dos pesares é o mais recomendado atualmente.
Porém estou com dificuldade de entender alguns pontos do cod.. por exemplo:
cod. completo
$(function() {
$('nav a').click(function(e) {
$("#loading").show();
href = $(this).attr("href");
loadContent(href);
history.pushState('', 'New URL: '+href, href);
e.preventDefault();
});
window.onpopstate = function(event) {
$("#loading").show();
console.log("pathname: "+location.pathname);
loadContent(location.pathname);
};
});
function loadContent(url){
$.getJSON("content.php", {cid: url, format: 'json'}, function(json) {
$.each(json, function(key, value){
$(key).html(value);
});
$("#loading").hide();
});
$('li').removeClass('current');
$('a[href="'+url+'"]').parent().addClass('current');
}
*Esse cod pode ser encontrado nesse exemplo prático -> http://html5.gingerhost.com/
Dúvidas nas Linhas abaixo:
L1
$.getJSON("content.php", {cid: url, format: 'json'}, function(json) {
*O que seria "content.php"??
L2
$(function() { $('nav a').click(function(e) { $("#loading").show();
*O que seria #loading? (Div onde sera carregada conteúdo das paginas?)
E me aproveitando um pouco da paciência de vocês... Como meu site estar em AJAX e suas urls estão assim -> www.site.com.br/#php/pagina1.php como faço para que ela seja visualizada assim -> www.site.com.br/pagina1 ??
Tipo tenho que usar algum outro método para deixar as urls amigaveis (www.site.com.br/pagina1) e depois uso o pushState() para criar uma pag "paralela" que seja possivel ser rastreada pelos robos do google?? (N entendi bem como isso funciona).
Meu cod em ajax estar assim:
Instrucao.js
function extraiScript(texto){
// inicializa o inicio ><
var ini = 0;
// loop enquanto achar um script
while (ini!=-1){
// procura uma tag de script
ini = texto.indexOf('<script', ini);
// se encontrar
if (ini >=0){
// define o inicio para depois do fechamento dessa tag
ini = texto.indexOf('>', ini) + 1;
// procura o final do script
var fim = texto.indexOf('</script>', ini);
// extrai apenas o script
codigo = texto.substring(ini,fim);
// executa o script
eval(codigo);
}
}
startEditor();
}
function abrirPag(valor){
var url = valor;
xmlRequest.open("GET",url,true);
xmlRequest.onreadystatechange = mudancaEstado;
xmlRequest.send(null);
return url;
}
function mudancaEstado(){
if (xmlRequest.readyState == 4){
texto=unescape(xmlRequest.responseText.replace(/\+/g," "));
document.getElementById("corpo").innerHTML = xmlRequest.responseText;
extraiScript(texto);
}
}
function id( el ){
return document.getElementById( el );
}
function pega_arq( url2 ){
var file = url2.split('#');
return ( file[1] ) ? file[1] : 'php/home.php';
}
window.onhashchange = function() {
loadPag();
};
function loadPag(){
var as = document.getElementsByTagName('a');
for( var i=0; i<as.length; i++ ){
as[i].onclick = function(){
abrirPag( pega_arq( this.href ) );
}
}
abrirPag( pega_arq( document.location.href ) );
}
Qualquer dica ou orientação será bem vinda.. Desde já agradeço. ^^
Assim que tiver conseguido posto o cod aqui. abss
L1
content.php é o arquivo q está sendo requisitado no ajax.
L2
#loading, provavelmente é uma tag <img /> de um gif para ser mostrada enqnto a requisição não termina.
Sim, vc tem que usar reescrita de URL para deixar as urls /pagina1, pesquise sobre .htaccess(caso use servidor apache).
Vc meio que misturou um código em js puro do meu blog, com um outro.. use apenas esse aqui:
(leia ele completo para entender)
Cara, fiquei a noite toda pra descobrir isso ai. Não sei se ainda está precisando, mas a dica é o seguinte: Vc tem que responder por meio desse arquivo PHP ou por meio de ASP.NET por exemplo, usando JSON. Aqui tem um exemplo:
string json = "{\"name\":\"Joe\"}";Response.Clear();Response.ContentType = "application/json;charset=utf-8";Response.Write(json);Response.End();
Depois que saquei que tinha que responder usando esse protocolo foi só buscar no google.
O mesmo exemplo em VB.NET funcionando com manipulador de arquivos:
Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim as_ = context.Request.Path
Se ainda tiver problemas, deixe-me saber. Abraço!