[Resolvido] [Dica] Função rápida pra AJAX pra multi carregamentos, simples e fácil
#1
Postou 06 abril 2006 - 16:53
Taí uma funçãozinha desenvolvida por mim que simplifica pra caramba o uso do ajax.
- Voce não precisa se preocupar com ficar instanciando ou coisa parecida. É só chamar a ajaxGet.
- Carrega também scripts javascript que vieram por ajax (exceto funções). Créditos para o skywalker.TO.
- Permite que voce carregue mais de um elemento ao mesmo tempo assincronamente.
- Permite que voce jogue o resultado da url em:
> uma variável javascript,
> diretamente no innerHTML de um elemento,
> em um input
> em um select sem se preocupar com nada.
- Você não precisa mais ficar se preocupando com a questão do cache.
Versão atual: 1.2 . Versão atual no post 13.
Forma de uso: (exemplos de uso no post post 7.)
ajaxGet( sua_pagina [string] , variavel_ou_objeto_que_recebera_o_retorno [string ou object] , exibe_texto_carregando_ou_nao [true ou false])
Se os moderas quiserem colocar no Laboratório de Scripts... É que resolvi postar aqui no ajax pro povo daqui ver e testar.
Pra usar é só chamar a ajaxGet.
Também publiquei esta solução no meu blog sobre webstandards, ajax, javascript, etc.
Testem ae e comentem o que acharem. Se for bom, usem. Se acharem bugs, avisem. Só peço que coloquem meu nome nos credits... Eu testei com sucesso no IE6 e no FF1.5 em dois computadores diferentes.
---------------------------------------------------------
Histórico de alterações
EDITADO 1: Já achei um bug no select do IE (Veja aqui a descrição do bug). Vou corrigir e já posto novamente, o problema é que isso tá difícil. Se alguém tiver alguma solução e quiser contribuir...
EDITADO 2: Versão atualizada no Post 2
EDITADO 3: Dei uma melhorada neste post inicial aqui pra ficar mais fácil de saber as funcionalidades do meu script.
EDITADO 4: Nova versão no post 7. Melhorei o retorno de erros pra melhorar o debug e fiz uma forma de não cachear a página.
EDITADO 5: Versão 1.2 no post 13. Adicionei o controle de erros para o ajax.status=0 e tratamento interpretar scripts que venham junto com a página (créditos para o Skywalker.TO):
#2
Postou 07 abril 2006 - 17:21
Deu um #@?$%~ trabalho corrigir o bug do innerHTML para selects do IE, porém com isso criei mais uma função que será útil pra todo mundo. Fiquei 2 dias trabalhando pra corrigir este bug do IE e não ví nada na net parecido, por isso peço que, se forem usa-la, pelo menos deixem meus nomes no script.
A função que te permite colocar um innerHTML no select chama-se select_innerHTML e tá abaixo da ajaxGet (testado no IE6 e FF1.5):
Melhorei também pra que exiba o dado no select mesmo se a página de retorno não for formada só por options.
Agora a nova função do ajax corrigida:
micoxAjax.js
function ajaxGet(url,elemento_retorno,exibe_carregando){
/******
* ajaxGet - Coloca o retorno de uma url em um elemento qualquer
* Use a vontade mas coloque meu nome nos créditos. Dúvidas, me mande um email.
* Versão: 1.0 - 06/04/2006
* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
* Parametros:
* url: string; elemento_retorno: object||string; exibe_carregando:boolean
* - Se elemento_retorno for um elemento html (inclusive inputs e selects),
* exibe o retorno no innerHTML / value / options do elemento
* - Se elemento_retorno for o nome de uma variavel
* (o nome da variável deve ser declarado por string, pois será feito um eval)
* a função irá atribuir o retorno à variável ao receber a url.
*******/
var ajax1 = pegaAjax();
if(ajax1){
ajax1.onreadystatechange = ajaxOnReady
ajax1.open("GET", url ,true);
if(exibe_carregando){ put("Carregando ...") }
ajax1.send(null)
return true;
}else{
return false;
}
function ajaxOnReady(){
if (ajax1.readyState==4){
if(ajax1.status == 200){
var texto=ajax1.responseText;
if(texto.indexOf(" ")<0) texto=texto.replace(/\+/g," ");
//texto=unescape(texto); //descomente esta linha se tiver usado o urlencode no php ou asp
put(texto);
}else{
if(exibe_carregando){put("Falha no carregamento");}
}
ajax1 = null
}else if(exibe_carregando){//para mudar o status de cada carregando
put("Carregando ..." )
}
}
function put(valor){ //coloca o valor na variavel/elemento de retorno
if((typeof(elemento_retorno)).toLowerCase()=="string"){ //se for o nome da string
if(valor!="Falha no carregamento"){
eval(elemento_retorno + '= unescape("' + escape(valor) + '")')
}
}else if(elemento_retorno.tagName.toLowerCase()=="input"){
valor = escape(valor).replace(/\%0D\%0A/g,"")
elemento_retorno.value = unescape(valor);
}else if(elemento_retorno.tagName.toLowerCase()=="select"){
select_innerHTML(elemento_retorno,valor)
}else if(elemento_retorno.tagName){
elemento_retorno.innerHTML = valor;
//alert(elemento_retorno.innerHTML)
}
}
function pegaAjax(){ //instancia um novo xmlhttprequest
//baseado na getXMLHttpObj que possui muitas cópias na net e eu nao sei quem é o autor original
if(typeof(XMLHttpRequest)!='undefined'){return new XMLHttpRequest();}
var axO=['Microsoft.XMLHTTP','Msxml2.XMLHTTP','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0'];
for(var i=0;i<axO.length;i++){ try{ return new ActiveXObject(axO[i]);}catch(e){} }
return null;
}
}
function select_innerHTML(objeto,innerHTML){
/******
* select_innerHTML - altera o innerHTML de um select independente se é FF ou IE
* Corrige o problema de não ser possível usar o innerHTML no IE corretamente
* Veja o problema em: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
* Use a vontade mas coloque meu nome nos créditos. Dúvidas, me mande um email.
* Versão: 1.0 - 06/04/2006
* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
* Parametros:
* objeto(tipo object): o select a ser alterado
* innerHTML(tipo string): o novo valor do innerHTML
*******/
objeto.innerHTML = ""
var selTemp = document.createElement("micoxselect")
var opt;
selTemp.id="micoxselect1"
document.body.appendChild(selTemp)
selTemp = document.getElementById("micoxselect1")
selTemp.style.display="none"
if(innerHTML.toLowerCase().indexOf("<option")<0){//se não é option eu converto
innerHTML = "<option>" + innerHTML + "</option>"
}
innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
selTemp.innerHTML = innerHTML
for(var i=0;i<selTemp.childNodes.length;i++){
if(selTemp.childNodes[i].tagName){
opt = document.createElement("OPTION")
for(var j=0;j<selTemp.childNodes[i].attributes.length;j++){
opt.setAttributeNode(selTemp.childNodes[i].attributes[j].cloneNode(true))
}
opt.value = selTemp.childNodes[i].getAttribute("value")
opt.text = selTemp.childNodes[i].innerHTML
if(document.all){ //IEca
objeto.add(opt)
}else{
objeto.appendChild(opt)
}
}
}
document.body.removeChild(selTemp)
selTemp = null
}Exemplo de utilização:
teste.htm
<style>
div {border:3px solid red; margin:10px; float:left; width:200px; height:200px; overflow:scroll;}
</style>
<script src="micoxAjax.js"></script>
<script language="javascript">
function teste(){
ajaxGet("http://localhost/options.htm",document.getElementById("div1"),true)
ajaxGet("http://localhost/options.htm","document.getElementById('div2').innerHTML",false)
ajaxGet("http://localhost/options.htm",document.getElementById("input1"),false)
ajaxGet("http://localhost/options.htm",document.getElementById("select1"),true)
}
</script>
<div id="div1"> var receber o innerHTML</div>
<div id="div2"> Vai receber da variável </div>
<input type="text" id="input1" value="vai receber o value"/>
<select id="select1">
<option>Vai receber o select</option>
</select>
<br /><button onclick="teste()">Vai</button>Por favor, testem em outros navegadores e postem o resultado, e se gostaram ou não...
#4
Postou 07 abril 2006 - 17:41
Quote
Voce tem que colocar pra baixar um arquivo válido que exista no seu servidor.
Quote
#6
Postou 08 abril 2006 - 09:28
Quote
Ou. Acabei de testar aqui em casa no FF1.5 e no IE6 e deu tudo belezão!!!
PS.: Antes eu tinha testado no serviço.
Vou fazer o seguinte. Vou mudar o esquema do tratamento de erros pragente saber qual erro específico tá dando e não exiba apenas o "Falha no carregamento". Já já eu posto.
#7
Postou 10 abril 2006 - 10:40
Arquivo micoxAjax.js (contém a função ajaxGet)
function ajaxGet(url,elemento_retorno,exibe_carregando){
/******
* ajaxGet - Coloca o retorno de uma url em um elemento qualquer
* Use a vontade mas coloque meu nome nos créditos. Dúvidas, me mande um email.
* Versão: 1.1 - 10/04/2006
* Autor: Micox - micoxjcg@yahoo.com.br
* Parametros:
* url: string; elemento_retorno: object||string; exibe_carregando:boolean
* - Se elemento_retorno for um elemento html (inclusive inputs e selects),
* exibe o retorno no innerHTML / value / options do elemento
* - Se elemento_retorno for o nome de uma variavel
* (o nome da variável deve ser declarado por string, pois será feito um eval)
* a função irá atribuir o retorno à variável ao receber a url.
*******/
var ajax1 = pegaAjax();
if(ajax1){
url = antiCacheRand(url)
ajax1.onreadystatechange = ajaxOnReady
ajax1.open("GET", url ,true);
ajax1.setRequestHeader("Cache-Control", "no-cache");
ajax1.setRequestHeader("Pragma", "no-cache");
if(exibe_carregando){ put("Carregando ...") }
ajax1.send(null)
return true;
}else{
return false;
}
function ajaxOnReady(){
if (ajax1.readyState==4){
if(ajax1.status == 200){
var texto=ajax1.responseText;
if(texto.indexOf(" ")<0) texto=texto.replace(/\+/g," ");
//texto=unescape(texto); //descomente esta linha se tiver usado o urlencode no php ou asp
put(texto);
}else{
if(exibe_carregando){put("Falha no carregamento. " + httpStatus(ajax1.status));}
}
ajax1 = null
}else if(exibe_carregando){//para mudar o status de cada carregando
put("Carregando ..." )
}
}
function put(valor){ //coloca o valor na variavel/elemento de retorno
if((typeof(elemento_retorno)).toLowerCase()=="string"){ //se for o nome da string
if(valor!="Falha no carregamento"){
eval(elemento_retorno + '= unescape("' + escape(valor) + '")')
}
}else if(elemento_retorno.tagName.toLowerCase()=="input"){
valor = escape(valor).replace(/\%0D\%0A/g,"")
elemento_retorno.value = unescape(valor);
}else if(elemento_retorno.tagName.toLowerCase()=="select"){
select_innerHTML(elemento_retorno,valor)
}else if(elemento_retorno.tagName){
elemento_retorno.innerHTML = valor;
//alert(elemento_retorno.innerHTML)
}
}
function pegaAjax(){ //instancia um novo xmlhttprequest
//baseado na getXMLHttpObj que possui muitas cópias na net e eu nao sei quem é o autor original
if(typeof(XMLHttpRequest)!='undefined'){return new XMLHttpRequest();}
var axO=['Microsoft.XMLHTTP','Msxml2.XMLHTTP','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0'];
for(var i=0;i<axO.length;i++){ try{ return new ActiveXObject(axO[i]);}catch(e){} }
return null;
}
function httpStatus(stat){ //retorna o texto do erro http
switch(stat){
case 400: return "400: Solicitação incompreensível"; break;
case 403: case 404: return "404: Não foi encontrada a URL solicitada"; break;
case 405: return "405: O servidor não suporta o método solicitado"; break;
case 500: return "500: Erro desconhecido de natureza do servidor"; break;
case 503: return "503: Capacidade máxima do servidor alcançada"; break;
default: return "Erro " + stat + ". Mais informações em http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html"; break;
}
}
function antiCacheRand(aurl){
var dt = new Date();
if(aurl.indexOf("?")>=0){// já tem parametros
return aurl + "&" + encodeURI(Math.random() + "_" + dt.getTime());
}else{ return aurl + "?" + encodeURI(Math.random() + "_" + dt.getTime());}
}
}
function select_innerHTML(objeto,innerHTML){
/******
* select_innerHTML - altera o innerHTML de um select independente se é FF ou IE
* Corrige o problema de não ser possível usar o innerHTML no IE corretamente
* Veja o problema em: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
* Use a vontade mas coloque meu nome nos créditos. Dúvidas, me mande um email.
* Versão: 1.0 - 06/04/2006
* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
* Parametros:
* objeto(tipo object): o select a ser alterado
* innerHTML(tipo string): o novo valor do innerHTML
*******/
objeto.innerHTML = ""
var selTemp = document.createElement("micoxselect")
var opt;
selTemp.id="micoxselect1"
document.body.appendChild(selTemp)
selTemp = document.getElementById("micoxselect1")
selTemp.style.display="none"
if(innerHTML.toLowerCase().indexOf("<option")<0){//se não é option eu converto
innerHTML = "<option>" + innerHTML + "</option>"
}
innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
selTemp.innerHTML = innerHTML
for(var i=0;i<selTemp.childNodes.length;i++){
if(selTemp.childNodes[i].tagName){
opt = document.createElement("OPTION")
for(var j=0;j<selTemp.childNodes[i].attributes.length;j++){
opt.setAttributeNode(selTemp.childNodes[i].attributes[j].cloneNode(true))
}
opt.value = selTemp.childNodes[i].getAttribute("value")
opt.text = selTemp.childNodes[i].innerHTML
if(document.all){ //IEca
objeto.add(opt)
}else{
objeto.appendChild(opt)
}
}
}
document.body.removeChild(selTemp)
selTemp = null
}Arquivo teste.htm (é a página que contém os divs que receberão o conteúdo carregado por ajax. Serve só pra exemplificar o uso. É lógico que você usará sua própria página.)
<style>
div {border:3px solid red; margin:10px; float:left; width:200px; height:200px; overflow:scroll;}
micoxselect {border:1px solid black;}
micoxselect moption {border:1px solid red;}
</style>
<script src="engine/micoxAjax.js?12" type="text/javascript" language="javascript"></script>
<script language="javascript">
function pega(quem){ return document.getElementById(quem)}
function teste(){
ajaxGet("http://localhost/lojavirtualfree/optionas.htm",document.getElementById("div1"),true)
ajaxGet("http://localhost/lojavirtualfree/optionas.htm","document.getElementById('div2').innerHTML",false)
ajaxGet("http://localhost/lojavirtualfree/optionas.htm",document.getElementById("input1"),false)
ajaxGet("http://localhost/lojavirtualfree/optionas.htm?viva",document.getElementById("select1"),true)
//alert(document.getElementById("select1").innerHTML)
}
</script>
<div id="div1"> var receber o innerHTML</div>
<div id="div2"> Vai receber da variável </div>
<input type="text" id="input1" value="vai receber o value"/>
<select id="select1" name="select1">
<option>Vai receber o select</option>
<option>Vai receber o select</option>
</select>
<br />
<button onclick="teste()">Vai</button>Optionas.htm (Página que será puxada pelo ajax e jogada nas divs. Serve só para o exemplo. É claro que você usará sua própria página.)
Autor: Micox - <br /> <strong>micoxjcg@yahoo.com.br</strong>
#8
Postou 12 abril 2006 - 14:50
<script src="ajax.js" language="javascript" type="text/javascript"></script>
<script>
function ler() {
objeto = new cria;
objeto.open("GET", "ler_chat.php", true);
objeto.onreadystatechange = function() {
// if(objeto.readyState == 2){
parent.document.getElementById("car").innerHTML= '<img src="carregando.gif" width="22" height="22">';
// }else{
// document.getElementById("car").innerHTML= "";
// }
if(objeto.readyState == 4) {
if(objeto.status == 200) {
parent.document.getElementById("car").innerHTML= "";
document.getElementById("mostrar").innerHTML= objeto.responseText;
} else {
alert("Falha: " + objeto.statusText);
}
}
}
objeto.send(null);
setTimeout("ler()",1500);
}valews
#9
Postou 13 abril 2006 - 12:44
tem um site meu que carrego um <? include topo.php ?> .. nesse include eu carrego um player de audio.. windows media player...
abaixo tem os links para as secoes do site...
o que eu queria... era que quando eu clicasse nos links para as secoes.... o player nao parasse de rodar, que o cliente navegasse pelo site ouvindo o som sem parar. com o IEca... o player pára de rodar... com o FF ele nao pára....
tem alguma ideia do pq????
valeu!!!!
#10
Postou 14 abril 2006 - 10:46
Pra fazer isso, você não pode recarregar o local onde tá o seu player. E pra não recarregar este local, você tem 3 opções:
1) Deixar o player em outra janela ou em uma popup;
2) Usar frames e deixar o player em outro frame (ou iframe);
3) Usar ajax e recarregar apenas o restante do site, deixando seu player quieto (eu não acho esta solução boa)
PS.: Se algum moderador conseguir quebrar essa dúvida em um novo post seria melhor...
#11
Postou 15 abril 2006 - 20:41
dá esse erro: Falha no carregamento. Erro 0. Mais informações em http://www.w3.org/Pr...2616-sec10.html, dentro da textarea e do input....
EDIT--------
agora ta OK
parece q o erro era no localhost ><"
#12
Postou 17 abril 2006 - 10:50
Ele dá quando não se utiliza o script corretamente, ou quando você tenta fazer coisas que o navegador não permite (como tentar abrir uma url que não está no mesmo domínio do script).
Daí o ajax1.status acaba sendo 0.
Vou corrigir e já posto algo.
#13
Postou 20 abril 2006 - 15:04
Adicionei o controle de erros para o ajax.status=0 e tratamento interpretar scripts que venham junto com a página (créditos para o Skywalker.TO):
function ajaxGet(url,elemento_retorno,exibe_carregando){
/******
* ajaxGet - Coloca o retorno de uma url em um elemento qualquer
* Use a vontade mas coloque meu nome nos créditos. Dúvidas, me mande um email.
* Versão: 1.2 - 20/04/2006
* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
* Parametros:
* url: string; elemento_retorno: object||string; exibe_carregando:boolean
* - Se elemento_retorno for um elemento html (inclusive inputs e selects),
* exibe o retorno no innerHTML / value / options do elemento
* - Se elemento_retorno for o nome de uma variavel
* (o nome da variável deve ser declarado por string, pois será feito um eval)
* a função irá atribuir o retorno à variável ao receber a url.
*******/
var ajax1 = pegaAjax();
if(ajax1){
url = antiCacheRand(url)
ajax1.onreadystatechange = ajaxOnReady
ajax1.open("GET", url ,true);
//ajax1.setRequestHeader("Content-Type", "text/html; charset=iso-8859-1");//"application/x-www-form-urlencoded");
ajax1.setRequestHeader("Cache-Control", "no-cache");
ajax1.setRequestHeader("Pragma", "no-cache");
if(exibe_carregando){ put("Carregando ...") }
ajax1.send(null)
return true;
}else{
return false;
}
function ajaxOnReady(){
if (ajax1.readyState==4){
if(ajax1.status == 200){
var texto=ajax1.responseText;
if(texto.indexOf(" ")<0) texto=texto.replace(/\+/g," ");
//texto=unescape(texto); //descomente esta linha se tiver usado o urlencode no php ou asp
put(texto);
extraiScript(texto);
}else{
if(exibe_carregando){put("Falha no carregamento. " + httpStatus(ajax1.status));}
}
ajax1 = null
}else if(exibe_carregando){//para mudar o status de cada carregando
put("Carregando ..." )
}
}
function put(valor){ //coloca o valor na variavel/elemento de retorno
if((typeof(elemento_retorno)).toLowerCase()=="string"){ //se for o nome da string
if(valor!="Falha no carregamento"){
eval(elemento_retorno + '= unescape("' + escape(valor) + '")')
}
}else if(elemento_retorno.tagName.toLowerCase()=="input"){
valor = escape(valor).replace(/\%0D\%0A/g,"")
elemento_retorno.value = unescape(valor);
}else if(elemento_retorno.tagName.toLowerCase()=="select"){
select_innerHTML(elemento_retorno,valor)
}else if(elemento_retorno.tagName){
elemento_retorno.innerHTML = valor;
//alert(elemento_retorno.innerHTML)
}
}
function pegaAjax(){ //instancia um novo xmlhttprequest
//baseado na getXMLHttpObj que possui muitas cópias na net e eu nao sei quem é o autor original
if(typeof(XMLHttpRequest)!='undefined'){return new XMLHttpRequest();}
var axO=['Microsoft.XMLHTTP','Msxml2.XMLHTTP','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0'];
for(var i=0;i<axO.length;i++){ try{ return new ActiveXObject(axO[i]);}catch(e){} }
return null;
}
function httpStatus(stat){ //retorna o texto do erro http
switch(stat){
case 0: return "Erro desconhecido de javascript";
case 400: return "400: Solicitação incompreensível"; break;
case 403: case 404: return "404: Não foi encontrada a URL solicitada"; break;
case 405: return "405: O servidor não suporta o método solicitado"; break;
case 500: return "500: Erro desconhecido de natureza do servidor"; break;
case 503: return "503: Capacidade máxima do servidor alcançada"; break;
default: return "Erro " + stat + ". Mais informações em http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html"; break;
}
}
function antiCacheRand(aurl){
var dt = new Date();
if(aurl.indexOf("?")>=0){// já tem parametros
return aurl + "&" + encodeURI(Math.random() + "_" + dt.getTime());
}else{ return aurl + "?" + encodeURI(Math.random() + "_" + dt.getTime());}
}
}
function select_innerHTML(objeto,innerHTML){
/******
* select_innerHTML - altera o innerHTML de um select independente se é FF ou IE
* Corrige o problema de não ser possível usar o innerHTML no IE corretamente
* Veja o problema em: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
* Use a vontade mas coloque meu nome nos créditos. Dúvidas, me mande um email.
* Versão: 1.0 - 06/04/2006
* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
* Parametros:
* objeto(tipo object): o select a ser alterado
* innerHTML(tipo string): o novo valor do innerHTML
*******/
objeto.innerHTML = ""
var selTemp = document.createElement("micoxselect")
var opt;
selTemp.id="micoxselect1"
document.body.appendChild(selTemp)
selTemp = document.getElementById("micoxselect1")
selTemp.style.display="none"
if(innerHTML.toLowerCase().indexOf("<option")<0){//se não é option eu converto
innerHTML = "<option>" + innerHTML + "</option>"
}
innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
selTemp.innerHTML = innerHTML
for(var i=0;i<selTemp.childNodes.length;i++){
if(selTemp.childNodes[i].tagName){
opt = document.createElement("OPTION")
for(var j=0;j<selTemp.childNodes[i].attributes.length;j++){
opt.setAttributeNode(selTemp.childNodes[i].attributes[j].cloneNode(true))
}
opt.value = selTemp.childNodes[i].getAttribute("value")
opt.text = selTemp.childNodes[i].innerHTML
if(document.all){ //IEca
objeto.add(opt)
}else{
objeto.appendChild(opt)
}
}
}
document.body.removeChild(selTemp)
selTemp = null
}
function extraiScript(texto){
//Maravilhosa função feita pelo SkyWalker.TO do imasters/forum
//http://forum.imasters.com.br/index.php?showtopic=165277&
// 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);
/**********************
* Alterado por Micox - micoxjcg@yahoo.com.br
* Alterei pois com o eval não executava funções.
***********************/
novo = document.createElement("script")
novo.text = codigo;
document.body.appendChild(novo);
}
}
}PS.: Por favor, não apaguem os créditos a mim e ao skywalker quando usarem as funções. Um pouco de ética é bom...
#18
Postou 25 maio 2006 - 15:22
Estou usando o seu "framework" e estou com um certo probleminha: acentuação!!!
Por exemplo: a palavra aplicação está aparecendo assim Aplica?
Sabe como resolver?
Resolvi!!! Vi seu outro post!! Valeu!
Este post foi editado por fael: 25 maio 2006 - 15:36
#20
Postou 25 maio 2006 - 16:46
Encontrei alguns problemas com o seu framework na questão cache... Não é sempre que ocorre, somente em alguns casos. Daí encontrei a solução! Você tem que colocar outros setRequestHeaders.
Ex.
ajax1.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
ajax1.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
ajax1.setRequestHeader("Pragma", "no-cache");flw
#22
Postou 26 maio 2006 - 09:50
Mas isso ocorre às vezes, não é sempre, só quando ele quer... hehehehe sinistro mesmo cara... Agora testando aqui eu percebi que mesmo colocando esses setHeaders a mais não adianta... Eu estou pensando que talvez ele atualize a tela, ou seja, faça o select no banco antes de excluir o registro. Vou testando, testando, até encontrar uma solução aqui...
Cara, eu tenho uma dúvida. Tem como eu usar o seu script para submeter um form? Por exemplo, neste caso de excluir os registros, eu estou submetendo para um iframe, eu queria fazer isso via ajax também. Tem como?
Abraço mano!
#23
Postou 26 maio 2006 - 11:43
Quanto a enviar form, só se for via GET. via Post eu não fiz inda não...
Falwos...
#24
Postou 26 maio 2006 - 14:12
micox, em May 26 2006, 11:43 AM, disse:
Na verdade eu faço duas chamadas numa função js
ajaxGet()
ajaxGet()
A primeira é para deletar e como provavelmente leva mais tempo para executar do que o select, o select traz o resultado com o registro ainda existente na tabela... mas não tem galho, eu coloquei um "Atulizar" pro usuário atualizar a lista... fica mais tranquilo... Problema resolvido!
micox, em May 26 2006, 11:43 AM, disse:
Mesmo com GET como eu faço então? Aonde eu chamo a função? Atualmente estou fazendo manualmente, pegando valor por valor com document.getElementById com uma função e depois chamo o AJAX, passando como parâmetro a página e seus parâmetros.
Valeu!
#25
Postou 26 maio 2006 - 16:07
Quote
Mas voce me deu uma ótima idéia de função pra fazer. Uma função que pegue o form e já mande ele por ajax.
Um dia eu faço e posto aqui.
té mais...
#26
Postou 02 junho 2006 - 08:01
Pow, tô meio perdido no meio de tanto código aew kara.
Tô muito afim de aprender Asynchronous Javascript And XML(AJAX)...
Já consegui entender como é feita a chamada a um programa CGI(PHP, Python, ASP, etc), mas isso, só com uma chamada assíncrona.
Alterando somente um local na página.
Quero fazer várias chamadas ao mesmo tempo, assincronamente, pra que seja alterado o conteúdo em várias partes do site em um clique do mouse(em um link por exemplo).
Pois é, li sim os seus post's, mas não entendi, pois não fiz os testes em kasa, por que tô sem tempo, entende?
Teria como você mandar pro meu e-mail(marcelodmdo@yahoo.com.br), um exemplo ou explicação mais detalhada sobre isso?
Meu site será colocado, talvez, semana que vem ao ar e quero fazer tais alterações antes disso.
Agradeço antecipadamente,
Marcelo Dênis
===========
"A vida, talvez, não sei, seja um pouco de tudo, traduzindo em NADA.
E poucos acertos... EU não posso ser EU... Eu agora sei que sou!!!"
#27
Postou 02 junho 2006 - 08:25
Começei a desenvolver essa função justamente porque eu tava com essa mesma idéia de você: carregar um monte de coisa ao mesmo tempo.
Daí fiz ela pra não precisar ficar preocupando com instanciar toooda vez...
Pra voce usar ela é só fazer como eu falei nos posta acima.
Simplão e rápido: É só voce chamar a função ajaxGet() passando como parâmetro:
1- sua url que será carregada
2- o elemento que deverá receber a nova página
3- true ou false, indicando se voce quer que seja exibido o texto "Carregando..." ou não...
Sacou? super simples.
-----------
Ah sim, e pro fael, que queria algo pra forms, lembrei que o Pita fez uma parada boa. Eu ainda não testei não...
#28
Postou 02 junho 2006 - 09:19
micox, em May 26 2006, 04:07 PM, disse:
Quote
Mas voce me deu uma ótima idéia de função pra fazer. Uma função que pegue o form e já mande ele por ajax.
Um dia eu faço e posto aqui.
té mais...
Micox, aquela minha função ajaxForm faz isso, ela pega os dados do form e envia para o servidor simulando o submit do formulário
http://forum.imaster...howtopic=174729
#31
Postou 03 junho 2006 - 14:42
#32
Postou 26 junho 2006 - 08:42
onclick="ajaxGet('?acao=faleConosco&system=true',document.getElementById('conteudo'),true);
porém retorna erro 404.. ai executo um alert('oi') -> tbm n funciona ai retiro o parametro ele retorna o alert...
como faço para chamar um javascript com paramentro? tem como ou preciso fazer assim:
function enviaForm(){
ajaxGet("?acao=faleConosco&system=true",document.getElementById("conteudo"),true);
}
Gostaria de saber tbm o seguinte: como enviar os dados do formulário com ajax??
pode ser pelo post?? tens algum exemplo?
Abraços.. valew fera.. esse script ta me resolvendo mtoos problemas!
#33
Postou 26 junho 2006 - 09:50
onclick="ajaxGet('?acao=faleConosco&system=true',document.getElementById('conteudo'),true);
porém retorna erro 404.. ai executo um alert('oi') -> tbm n funciona ai retiro o parametro ele retorna o alert...
como faço para chamar um javascript com paramentro? tem como ou preciso fazer assim:
function enviaForm(){
ajaxGet("?acao=faleConosco&system=true",document.getElementById("conteudo"),true);
}
Gostaria de saber tbm o seguinte: como enviar os dados do formulário com ajax??
pode ser pelo post?? tens algum exemplo?
Abraços.. valew fera.. esse script ta me resolvendo mtoos problemas!
#34
Postou 26 junho 2006 - 16:29
Ex:
onclick="ajaxGet('SUAPAGINA.HTM?acao=faleConosco&system=true',document.getElementById('conteudo'),true);2)
Quote
function enviaForm(){
ajaxGet("?acao=faleConosco&system=true",document.getElementById("conteudo"),true);
}
Não entendi a dúvida, mas tá parecendo coisa de javascript básico. De qualquer jeito corrija sua chamada, tá faltando o nome do arquivo como eu falei acima.
3)
Quote
pode ser pelo post?? tens algum exemplo?
Leia meu post anterior.
#36
Postou 03 setembro 2006 - 19:03
Só para avisar o pessoal
to usando ele da seguinte maneira
<a href="java script:;" onclick='ajaxGet("home.php?b=2",document.getElementById("meio"),true)'>E esta funcionando não sendo necessário passar toda a URL e tmb esta passando a variável.
E tmb está executando todas as PHP inclusives SQLS dentro pas paginas que são "INCLUIDAS" na div alvo.
#42
Postou 25 setembro 2006 - 22:06
E o resto do layout HTML.
É que o cara gosta de animação e pediu um topo em flash. Para colocar frescuras
Então nesse topo eu coloquei o menú.
E em baixo tem 2 colunas. A 1ª não tem nada d+ e a segunda que é onde aparece o conteúdo.
#43
Postou 26 setembro 2006 - 14:25
getURL("java script: funcao('parametro');");
Se não tiver ainda uma função que carrega Ajax, use esta minha: http://elmicox.blogs...-e-simples.html
#45
Postou 27 setembro 2006 - 10:54
#49
Postou 03 outubro 2006 - 13:15
Eu queria uma funcao que atualiza-se o proprio ajax. To com essa dificuldade aki. pois quando carrego uma pagina dentro dum div pelo ajax (do msmo jeito q você explicou) ele nao atualiza o conteudo. carregou e já era. Fica um conteudo velho.
da uma ajudinha ai mano.
#50
Postou 03 outubro 2006 - 13:25
willians dos reis, em 03/10/2006 - 13:15, disse:
Eu queria uma funcao que atualiza-se o proprio ajax. To com essa dificuldade aki. pois quando carrego uma pagina dentro dum div pelo ajax (do msmo jeito q você explicou) ele nao atualiza o conteudo. carregou e já era. Fica um conteudo velho.
da uma ajudinha ai mano.
Não me diga que isto acontece no I.E. ?
você pode usar headers para contornar isto.
Dê uma lida aqui.


Entrar
Cadastre-se
Ajuda


Quote

