Agora há uma página fixa e as demais páginas são chamadas via ajax e inseridas em uma div ('conteúdo')
O que acontece é que a tabela não é mais reordenada pelo TableKit.
Função AJAX que eu utilizo:
// JavaScript Document
function AJAX() {
this.Updater=carregarDados;
function carregarDados (caminhoRetorno,idResposta,metodo,mensagem) {
var conteudo=document.getElementById(idResposta)
conteudo.innerHTML= mensagem;
var xmlhttp = getXmlHttp();
//Abre a url
xmlhttp.open(metodo.toUpperCase(), caminhoRetorno,true);
//Executada quando o navegador obtiver o código
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
//Le o texto
var texto = xmlhttp.responseText;
//Desfaz o urlencode
texto = texto.replace(/\+/g," ");
texto = unescape(texto);
//Exibe o texto no div conteúdo
var conteudo=document.getElementById(idResposta);
conteudo.innerHTML=texto;
// Extrai e executa os javascript dentro das páginas carregadas
extraiScript(texto);
}
}
xmlhttp.send(null);
}
}
Sei que o AJAX simplesmente traz o texto da requisição e insere (com o INNERHTML) dentro da div e assim, não executaria códigos javascripts vindos dessa página.
Resolvi isso utilizando essa função que achei em um fórum:
function extraiScript(texto) {
var ini, pos_src, fim, codigo;
var objScript = null;
ini = texto.indexOf('<script', 0)
while (ini!=-1) {
var objScript = document.createElement("script");
//Busca se tem algum src a partir do inicio do script
pos_src = texto.indexOf(' src', ini)
ini = texto.indexOf('>', ini) + 1;
//Verifica se este e um bloco de script ou include para um arquivo de scripts
if (pos_src < ini && pos_src >=0) { //Se encontrou um "src" dentro da tag script, esta e um include de um arquivo script
//Marca como sendo o inicio do nome do arquivo para depois do src
ini = pos_src + 4;
//Procura pelo ponto do nome da extencao do arquivo e marca para depois dele
fim = texto.indexOf('.', ini)+4;
//Pega o nome do arquivo
codigo = texto.substring(ini,fim);
//Elimina do nome do arquivo os caracteres que possam ter sido pegos por engano
codigo = codigo.replace("=","").replace(" ","").replace("\"","").replace("\"","").replace("\'","").replace("\'","").replace(">","");
// Adiciona o arquivo de script ao objeto que sera adicionado ao documento
//alert(codigo);
objScript.src = codigo;
} else { //Se não encontrou um "src" dentro da tag script, esta e um bloco de codigo script
// Procura o final do script
fim = texto.indexOf('</script>', ini);
// Extrai apenas o script
codigo = texto.substring(ini,fim);
// Adiciona o bloco de script ao objeto que sera adicionado ao documento
objScript.text = codigo;
}
//Adiciona o script ao documento
document.body.appendChild(objScript);
// Procura a proxima tag de <script
ini = texto.indexOf('<script', fim);
//Limpa o objeto de script
objScript = null;
}
}
e chamando essa função no retorno da requisição AJAX, assim:
//Exibe o texto no div conteúdo
var conteudo=document.getElementById(idResposta);
conteudo.innerHTML=texto;
// Extrai e executa os javascript dentro das páginas carregadas
extraiScript(texto);
Acontece que ainda sim o TableKit não reordena a tabela pra mim.
Quando eu coloco um 'alert' dentro de um dos JS carregador pelo tablekit ele executa normalmente, mas o restante do script ele parece ignorar.
Alguém sabe como eu faço pra rodar esse script dentro de uma requisição do ajax?
Pergunta
Guest --Vinicius --
Olá a todos!
Estou precisando de uma ajuda meio urgente pro meu trabalho em relação ao AJAX.
Seguinte:
Estava utilizando o script 'TableKit' (http://www.millstream.com.au/upload/code/tablekit/) sem problemas com páginas em PHP. Normal..
Depois precisei mudar o sistema do meu site.
Agora há uma página fixa e as demais páginas são chamadas via ajax e inseridas em uma div ('conteúdo')
O que acontece é que a tabela não é mais reordenada pelo TableKit.
Função AJAX que eu utilizo:
// JavaScript Document function AJAX() { this.Updater=carregarDados; function carregarDados (caminhoRetorno,idResposta,metodo,mensagem) { var conteudo=document.getElementById(idResposta) conteudo.innerHTML= mensagem; var xmlhttp = getXmlHttp(); //Abre a url xmlhttp.open(metodo.toUpperCase(), caminhoRetorno,true); //Executada quando o navegador obtiver o código xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4) { //Le o texto var texto = xmlhttp.responseText; //Desfaz o urlencode texto = texto.replace(/\+/g," "); texto = unescape(texto); //Exibe o texto no div conteúdo var conteudo=document.getElementById(idResposta); conteudo.innerHTML=texto; // Extrai e executa os javascript dentro das páginas carregadas extraiScript(texto); } } xmlhttp.send(null); } }Sei que o AJAX simplesmente traz o texto da requisição e insere (com o INNERHTML) dentro da div e assim, não executaria códigos javascripts vindos dessa página. Resolvi isso utilizando essa função que achei em um fórum:function extraiScript(texto) { var ini, pos_src, fim, codigo; var objScript = null; ini = texto.indexOf('<script', 0) while (ini!=-1) { var objScript = document.createElement("script"); //Busca se tem algum src a partir do inicio do script pos_src = texto.indexOf(' src', ini) ini = texto.indexOf('>', ini) + 1; //Verifica se este e um bloco de script ou include para um arquivo de scripts if (pos_src < ini && pos_src >=0) { //Se encontrou um "src" dentro da tag script, esta e um include de um arquivo script //Marca como sendo o inicio do nome do arquivo para depois do src ini = pos_src + 4; //Procura pelo ponto do nome da extencao do arquivo e marca para depois dele fim = texto.indexOf('.', ini)+4; //Pega o nome do arquivo codigo = texto.substring(ini,fim); //Elimina do nome do arquivo os caracteres que possam ter sido pegos por engano codigo = codigo.replace("=","").replace(" ","").replace("\"","").replace("\"","").replace("\'","").replace("\'","").replace(">",""); // Adiciona o arquivo de script ao objeto que sera adicionado ao documento //alert(codigo); objScript.src = codigo; } else { //Se não encontrou um "src" dentro da tag script, esta e um bloco de codigo script // Procura o final do script fim = texto.indexOf('</script>', ini); // Extrai apenas o script codigo = texto.substring(ini,fim); // Adiciona o bloco de script ao objeto que sera adicionado ao documento objScript.text = codigo; } //Adiciona o script ao documento document.body.appendChild(objScript); // Procura a proxima tag de <script ini = texto.indexOf('<script', fim); //Limpa o objeto de script objScript = null; } }e chamando essa função no retorno da requisição AJAX, assim:Acontece que ainda sim o TableKit não reordena a tabela pra mim.
Quando eu coloco um 'alert' dentro de um dos JS carregador pelo tablekit ele executa normalmente, mas o restante do script ele parece ignorar.
Alguém sabe como eu faço pra rodar esse script dentro de uma requisição do ajax?
Agradeço qualquer ajuda!
Vinicius Arantes
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.