Webly: Ajax - Função Rápida E Simples - Webly

Ir para

Regras para postagem

É permitido postar livremente respostas com comentários, testes e avaliações dos scripts. Postagens contendo dúvidas sobre o script, deverão ser postadas no fórum principal de javascript/ECMAScript/AJAX.

IMPORTANTE: Todos os tutoriais postados neste fórum irão automaticamente para o portal Webly. Contribua você também e faça parte da equipe de colaboradores que fazem a evolução da web. Obrigado.


  • (11 Páginas)
  • +
  • 1
  • 2
  • 3
  • Último »

Ajax - Função Rápida E Simples Utilidade sem complicação Avaliar tópico: ***** 2 Votos

#1 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5473
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 07 julho 2006 - 03:36

Taí uma funçãozinha desenvolvida por mim que simplifica o uso do ajax.


Facilidades embutidas:
  • Voce não precisa se preocupar com ficar instanciando ou coisa parecida. É só chamar a ajaxGet.
  • Permite que voce carregue MAIS de um elemento ao mesmo tempo assincronamente.
  • Carrega também scripts javascript que vieram por ajax.
  • Resolve a questão do cache.
  • Permite que, sem complicação, voce jogue o resultado da url em:
    • uma variável javascript,
    • Dentro de um elemento HTML qualquer ( innerHTML )
    • em um input de formulário
    • em um select sem se preocupar com nada.
Versão atual: 1.2 .

Ativar o botão voltar na função: http://forum.ievolut...s...ost&p=74555

Postado também: No meu blog.

Forma de uso:
Criem um novo arquivo chamado MicoxAjax.js e insira o conteúdo do script, depois é só chamar a função
ajaxGet( sua_pagina [string] , variavel_ou_objeto_que_recebera_o_retorno [string ou object] , exibe_texto_carregando_ou_nao [true ou false])

Exemplos de uso:
<script language="javascript">
 function teste(){
	 ajaxGet("http://localhost/optionas.htm",document.getElementById("div1"),true)
	 ajaxGet("http://localhost/optionas.htm","document.getElementById('div2').innerHTML",false)	
	 ajaxGet("http://localhost/optionas.htm",document.getElementById("input1"),false)
	 
	 ajaxGet("http://localhost/optionas.htm?viva",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" name="select1">
	 <option>Vai receber o select</option>
	 <option>Vai receber o select</option>
 </select>
 <br />
 <button onclick="teste()">Carrega tudo</button>



O script:
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&ccedil;&atilde;o incompreensível"; break;
			 case 403: case 404: return "404: N&atilde;o foi encontrada a URL solicitada"; break;
			 case 405: return "405: O servidor n&atilde;o suporta o m&eacute;todo solicitado"; break;
			 case 500: return "500: Erro desconhecido de natureza do servidor"; break;
			 case 503: return "503: Capacidade m&aacute;xima do servidor alcançada"; break;
			 default: return "Erro " + stat + ". Mais informa&ccedil;&otilde;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://-- link para outro fórum não permitido --.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);
		 }
	 }
 }

valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#2 Membro offline   Leorm Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 1
  • Cadastrado: 19-julho 06

Ícone  Postou 19 julho 2006 - 11:28

Meu caro não estou conseguindo fazer com essa função rode...
Não estou entendo seu codigo muito bem, pode me explicar por favor. :(

Estou querendo apenas que a URL na barra de endereços fique fixa enquanto navego pela pagina...é possivel sem utilizar frames?

Este post foi editado por Leorm: 19 julho 2006 - 11:33

0

#3 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5473
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 19 julho 2006 - 11:48

Abaixo eu deixo um exemplo testado e funcionando.

Lembrando que rodar localmente sem servidor o AJAX não funciona.
Você deverá instalar um servidor como o Apache ou o IIS (ou outro qualquer) se quiser testar em sua própria máquina.
Ou então upar seus scripts para um servidor qualquer.

O código abaixo foi testado com sucesso em FF1.5 e IE6.

<html>
<head>
<script src="engine/micoxAjax.js?12" type="text/javascript" language="javascript"></script>
<script>
function carrega(pagina){
	ajaxGet(pagina,document.getElementById("recebe"),true)
}
</script>
</head>
<body>
<ul>
<li><a href="teste1.htm" onclick="carrega('teste1.htm');return false;">Link teste 1</a></li>
<li><a href="teste22.htm" onclick="carrega('teste22.htm');return false;">Link teste 22</a></li>
</ul>
<div id="recebe">
Esta div irá receber o conteudo.
</div>
</body>
</html>

valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#4 Membro offline   andrea Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 81
  • Cadastrado: 10-setembro 06

Postou 06 novembro 2006 - 02:56

putz muito bom.estava eu no google vendo se existia algo como:
document.getElementById('id').innerHTML = "arquivo.htm";
quando me deparei com seu artigo, perfeito, muito bom :joia:
0

#5 Membro offline   Pedro Faria Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 110
  • Cadastrado: 01-setembro 06

Postou 06 novembro 2006 - 03:07

Cara... o jquery brinca com isso....

www.jquery.com

usando o seu exemplo, ficaria assim:

<a href="teste1.htm" onclick="$('#recebe').load('teste1.htm'); return false;">Link teste 1</a>

Mas ele nao faz soh isso não... faz outras milhoes... :)

é tão bom que vai vir do core do Drupal 5.0 =)

t+
MUTANTE_POWER_B / Pedro Faria

http://www.phpavancado.net
0

#6 Membro offline   andrea Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 81
  • Cadastrado: 10-setembro 06

Postou 08 novembro 2006 - 09:52

achei alguns porens :( não funciona com alguns css digamos mais "avançados" tipo combo com largura 100% não rola, botão submit com imagem no fundo tb não rola e por aí vai, uma pena pois tava uma blz pra mim :D
0

#7 Membro offline   andrea Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 81
  • Cadastrado: 10-setembro 06

Postou 08 novembro 2006 - 10:14

Ver postandrea, em 08/11/2006 - 21:52, disse:

achei alguns porens :( não funciona com alguns css digamos mais "avançados" tipo combo com largura 100% não rola, botão submit com imagem no fundo tb não rola e por aí vai, uma pena pois tava uma blz pra mim :D
e outra coisa que acabei de descobrir, acentuação, ele não se dá bem com acentuação come um monte de acentos e coloca interrogação em outros, isso é do código sim pois e eu abro a págna sem sem dentro da que tá chamando tudo fica perfeito.
0

#8 Membro offline   andrea Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 81
  • Cadastrado: 10-setembro 06

Postou 08 novembro 2006 - 11:15

ooops acabei achando a solução em outro topico de outro forum do próprio micox :D header("Content-Type: text/html; charset=ISO-8859-1",true);
0

#9 Membro offline   fabio reis Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 5
  • Cadastrado: 15-dezembro 06

Postou 15 dezembro 2006 - 01:13

muito boa a sua funcao!

gostaria de saber se há possibilidade de passar mais de um valor usando a funcao ajaxGet.

foi dado o exemplo passando somente um valor atraves da document.getElementById

se possivel postem um exemplo para maior entedimento

abraço
0

#10 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5473
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 15 dezembro 2006 - 01:38

Fabio, isso aí que vc se referiu não é passar valor. Isso aí é indicar em qual elemento do HTML será jogado o conteúdo que vier pelo ajax.

Parece que vc está querendo algo pra postar formulários né?
Eu vi uma modificação da minha função rodando na internet que faz isso. vou ver se acho e posto aqui :joia:
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#11 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5473
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 15 dezembro 2006 - 02:09

Fabio, infelizmente eu procurei novamente no google e não achei.

Qd eu tiver com um tempo eu modifico minha função pra aceitar formulários automágicamente.

por enquanto vc vai ter que ficar com as outras soluçoes disponíveis na net. :(
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#12 Membro offline   fabio reis Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 5
  • Cadastrado: 15-dezembro 06

Postou 15 dezembro 2006 - 04:03

cara, eu tenho varios valores num form que podem ser mudados e é necessário fazer um cálculo, incluindo juros, e pegando tb valores de tabelas no DB. Imagino que precisaria indicar esses elementos HTML e fazer o calculo em outra pagina.

se a sua funcao nao faz isso, vc poderia me dar um "rumo" de como fazer?
seria até uma boa ideia para uma proxima versao do seu script

abraço
0

#13 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5473
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 15 dezembro 2006 - 04:41

Vc tem que pegar os valores dos inputs que quer enviar,
encodar para o formato URI,
mudar um header
e enviar via método send do ajax.

Se deus quiser eu faço a nova versão hoje anoite. :joia:
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#14 Membro offline   fabio reis Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 5
  • Cadastrado: 15-dezembro 06

Postou 15 dezembro 2006 - 04:45

sem querer abusar, mas vc poderia enviar um exemplo?
0

#15 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5473
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 16 dezembro 2006 - 06:14

Véio, eu vou fazer a função esse fim de semana ainda. :)
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

  • (11 Páginas)
  • +
  • 1
  • 2
  • 3
  • Último »


Resposta rápida

  

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)