Como adicionar Ajax para que as páginas (pagina1.php, pagina2.php) sejam carregadas na index.php sem refresh no site e com um loadzinho sem mudar muito a estrutura do site, isso por que eu sou novo nessa área e apesar de já saber bastante de php eu hoje que comecei a estudar javascript, rsrsrs, e aos poucos, tudo o que estou aprendendo estou implementando em meu site.<html><head>
<title>Amostra</title>
</head><body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><a href="index.php?pag=pagina1">Página 1</a> | <a href="index.php?pag=pagina2">Página 2</a> </td>
</tr>
<tr>
<td>
<?php
$pag = $_GET["pag"];
switch($pag){
case "pagina1":
include "pagina1.php";
break;
case "pagina2":
nclude "pagina2.php";
break;
default:
include "home.php";
break;
}
?>
</td>
</tr>
<tr>
<td> </td>
</tr>
</table>
</body></html>
Em alguns Forus IPB (as versões mais recentes) tem exatamente o que eu preciso, é só clicar no nick do usuário ao lado do tópico para acessar essa página e ver com seus próprios olhos o funcionamento.
No centro da página tem um menu e ao clicar em um link (Tópicos | Posts | Comentários...), aparece uma mensagem de Carragando... e em seguida abre a página solicitada sem refresh no site, a diferença é que eu acho que busca informações em uma base de dados e eu preciso é incluir páginas.
Bom eu não achei nada satisfatório para o meu caso na net então eu resolvi mesmo sem saber nada tentar montar alguma coisa com o que tem aqui, e deu isso:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Teste</title> <script> function openAjax() { var ajax; try { ajax = new XMLHttpRequest(); } catch(ee) { try { ajax = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { ajax = new ActiveXObject("Microsoft.XMLHTTP"); } catch(E) { ajax = false; } } } return ajax; } window.onload = loadFunctions; function loadFunctions() { ativarLinks(); } function gE(ID) { return document.getElementById(ID); } function gEs(tag) { return document.getElementsByTagName(tag); } function ativarLinks() { var menutag = gE('menubv'); var linksBtn = menutag.getElementsByTagName('a'); for (var x = 0; x < linksBtn.length; x++) { var linkBtn = linksBtn[x]; var atributoRel = new String(linkBtn.getAttribute('href')); linkBtn.onclick = function() { var ID = this.getAttribute('href').split('=')[1]; var verificalink = this.getAttribute('rel'); if(verificalink == "out"){ return true; }// if verificalink var ajax = openAjax(); var recipiente = gE('conteudo'); ajax.open('GET', '?page=' + ID, true); ajax.onreadystatechange = function() { if (ajax.readyState == 1) { // Cria o efeito de loading loading(true); }// if-ajax.readyState->1 if (ajax.readyState == 4) { if (ajax.status == 200) { // Remove o efeito de loading recipiente.style.textAlign = 'left'; loading(false); recipiente.innerHTML = ajax.responseText; } // if-status->200 }// if-ajax.readyState->4 }//linkBtn.onclick ajax.send(null); return false; }// for } } function loading(opt) { if (opt == true) { var refer = gE('conteudo'); var referHeight = refer.offsetHeight; refer.style.textAlign = 'left'; var img = document.createElement('img'); img.setAttribute('src','loading_bar.gif'); img.setAttribute('id','loading'); //img.setAttribute('width','235'); //img.style.marginTop = '5px'; if (!document.getElementById('loading')) { refer.innerHTML = ""; refer.insertBefore(img, refer.firstChild);} } else if (opt == false) { var imgLoading = gE('loading'); if (imgLoading) { imgLoading.parentNode.removeChild(imgLoading); } //imgloading } //elseif } //loading </script> </head> <body> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td id="menubv"><a href="?pag=pagina1">Página 1</a> | <a href="?pag=pagina2">Página 2</a></td> </tr> <tr> <td id="conteudo"> <?php switch($_GET['pag']){ case "pagina1": include ("pagina1.php"); break; case "pagina2": include ("pagina2.php"); break; default: include ("home.php"); } ?> </td> </tr> <tr> <td> </td> </tr> </table> </body> </html>É assim, deveria ele pegar os links da TD com id="menubv" e abrir as paginas com um loadzinho dentro da TD com id="conteudo", mas ela não abre a pagina1/2.php dentro da TD com id="conteudo" ela abre a prória página dentro dessa TD, ou seja, a index.php (o loading funcionou perfeitamente) o pior é que com o FF, quantas vesez se clicar no lnk é quantas vesez a página vai abrir dentro da TD conteudo.
Gente por favor uma ajudinha pra um pobre aprendiz, COMO EU FAÇO ISSO FUNCIONAR?????
Achei um código bem enxuto. Código final para quem precisar:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Teste</title> <script type="text/javascript"> var xmlhttp = getXmlHttpRequest(); function getXmlHttpRequest() { if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if (window.ActiveXObject) { try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e){} } } } function requisicao(_strNomePagina) { xmlhttp.open("GET", _strNomePagina, true); xmlhttp.setRequestHeader("Content-Type", "text/html; charset=iso-8859-1"); xmlhttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate"); xmlhttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0"); xmlhttp.setRequestHeader("Pragma", "no-cache"); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState==1) { document.getElementById("contents").innerHTML = "<img src='loading_bar.gif' /><br />Carregando..."; } if (xmlhttp.readyState==4) { if (xmlhttp.status == 200) { document.getElementById("contents").innerHTML = xmlhttp.responseText; } } } xmlhttp.send(null); } </script> </head> <body> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td id="menu"> <a href="?pag=pagina1" onclick="requisicao('?pag=pagina1')">Página 1</a> | <a href="?pag=pagina2" onclick="requisicao('?pag=pagina2')">Página 2</a> | <a href="?pag=pagina3" onclick="requisicao('?pag=pagina3')">Página 3</a> </td> </tr> <tr> <td id="contents"> <?php $pag = $_GET["pag"]; switch($pag){ case "pagina1": include "pagina1.php"; break; case "pagina2": include "pagina2.php"; break; case "pagina3": include "pagina3.php"; break; default: include "home.php"; break; } ?> </td> </tr> <tr> <td> </td> </tr> </table> </body> </html>Testado no IE e FF com javascript habilitado e desabilitado(óbvio que o ajax não funciona para este ultimo) e as páginas abrem beleza dentro da TD com id="conteudo".
Testei também usando ao tabless e tudo filé.