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é.

















