Webly: Upload Assíncrono (iframe como AJAX) - 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.


  • (3 Páginas)
  • +
  • 1
  • 2
  • 3

Upload Assíncrono (iframe como AJAX) 1 função simples Avaliar tópico: ***** 1 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 13 março 2007 - 08:15

Fonte: Upload Assíncrono (iframe como AJAX) - 1 função simples - El Micox

Tô postando aqui uma função pra você fazer upload bem parecido com ajax (não é ajax!!). Função simples e fácil de usar.
Ela faz um upload assíncrono, ou seja, não recarrega a página toda (assim como o AJAX).
Quem usa alguns serviços do google como o GMail ou o GooglePages já conhece este recurso muito bem.

Upload usando apenas AJAX não é viável no ambiente da Internet pois, por motivos de segurança, os navegadores por padrão não dão acesso ao sistema de arquivos para o Javascript (se quiser descobrir como ativar esta característica não padrão, leia aqui, mas acredito não ser muito útil ajax upload dessa forma).

Esta minha função utiliza técnicas que envolvem iframes, mas não vou dar explicações aqui não. Explicações sobre como desenvolvi a função serão dadas em um novo post. Este post aqui é só para o código.

Ah, sim, no próximo post mostrarei também uma função um pouco mais customizável já pra quem entende melhor de Javascript.

Testado no Firefox 2.0, Internet Explorer 6.0 e Opera 9.1. Pelamordedeus, quem puder testar em outros navegadores aí e quiser citar a experiência, faça este favor à humanidade e cite a experiência nos comentários. Obrigado.

1) Coloque o código abaixo em um arquivo chamado micoxUpload.js

/* funçõezinhas padrão pra facilitar */
function $m(quem){
 //apelido só pra não ficar repetindo o document.getElementById
 return document.getElementById(quem)
}
function remove(quem){
 quem.parentNode.removeChild(quem);
}
function addEvent(obj, evType, fn){
 //o velho do elcio.com.br/crossbrowser
	if (obj.addEventListener)
		obj.addEventListener(evType, fn, true)
	if (obj.attachEvent)
		obj.attachEvent("on"+evType, fn)
}
function removeEvent( obj, type, fn ) {
  if ( obj.detachEvent ) {
	obj.detachEvent( 'on'+type, fn );
  } else {
	obj.removeEventListener( type, fn, false ); }
} 
/* a que faz o serviço pesado */
function micoxUpload(form,url_action,id_elemento_retorno,html_exibe_carregando,html_erro_http){
/******
* micoxUpload - Submete um form para um iframe oculto e pega o resultado. Consequentemente pode
*			   ser usado pra fazer upload de arquivos de forma assíncrona.
* Use a vontade mas coloque meu nome nos créditos. Licença Creative Commons.
* Versão: 1.0 - 03/03/2007 - Testado no FF2.0 IE6.0 e OP9.1
* Autor: Micox - Náiron JCG - elmicox.blogspot.com - micoxjcg@yahoo.com.br
* Parametros:
* form - o form a ser submetido ou seu ID
* url_action - url pra onde deve ser submetido o form
* id_elemento_retorno - id do elemento que irá receber a informação de retorno
* html_exibe_carregando - Texto (ou imagem) que será exibido enquanto se carrega o upload
* html_erro_http - texto (ou imagem) que será exibido se der erro HTTP.
*******/

 //testando se passou o ID ou o objeto mesmo
 form = typeof(form)=="string"?$m(form):form;
 
 var erro="";
 if(form==null || typeof(form)=="undefined"){ erro += "O form passado no 1o parâmetro não existe na página.\n";}
 else if(form.nodeName!="FORM"){ erro += "O form passado no 1o parâmetro da função não é um form.\n";}
 if($m(id_elemento_retorno)==null){ erro += "O elemento passado no 3o parâmetro não existe na página.\n";}
 if(erro.length>0) {
  alert("Erro ao chamar a função micoxUpload:\n" + erro);
  return;
 }

 //criando o iframe
 var iframe = document.createElement("iframe");
 iframe.setAttribute("id","micox-temp");
 iframe.setAttribute("name","micox-temp");
 iframe.setAttribute("width","0");
 iframe.setAttribute("height","0");
 iframe.setAttribute("border","0");
 iframe.setAttribute("style","width: 0; height: 0; border: none;");
 /* Não usei display:none pra esconder o iframe
	pois tem uma lenda que diz que o NS6 ignora
	iframes que tenham o display:none */
 
 //adicionando ao documento
 form.parentNode.appendChild(iframe);
 window.frames['micox-temp'].name="micox-temp"; //ie sucks
 
 //adicionando o evento ao carregar
 var carregou = function() { 
   removeEvent( $m('micox-temp'),"load", carregou);
   var cross = "java script: ";
   cross += "window.parent.$m('" + id_elemento_retorno + "').innerHTML = document.body.innerHTML; void(0); ";
   
   $m(id_elemento_retorno).innerHTML = html_erro_http;
   $m('micox-temp').src = cross;
   //deleta o iframe
   setTimeout(function(){ remove($m('micox-temp'))}, 250);
  }
 addEvent( $m('micox-temp'),"load", carregou)
 
 //setando propriedades do form
 form.setAttribute("target","micox-temp");
 form.setAttribute("action",url_action);
 form.setAttribute("method","post");
 form.setAttribute("enctype","multipart/form-data");
 form.setAttribute("encoding","multipart/form-data");
 //submetendo
 form.submit();
 
 //se for pra exibir alguma imagem ou texto enquanto carrega
 if(html_exibe_carregando.length > 0){
  $m(id_elemento_retorno ).innerHTML = html_exibe_carregando;
 }
 
}


2) Inclua (chame) este arquivo no seu HTML

<script type="text/javascript" src="micoxUpload.js"></script>


3) Os parâmetros na hora de chamar a função são:

1. form - o form a ser submetido ou o ID de algum form que queira submeter.
2. url_action - url pra onde deve ser submetido o form. Tem a mesma função do parâmetro "action" de um form.
3. id_elemento_retorno - id do elemento que irá receber a informação de retorno.
4. html_exibe_carregando - Texto (ou imagem) que será exibido enquanto se carrega o upload
5. html_erro_http - Texto (ou imagem) que será exibido se der erro HTTP.

4) Pronto. Agora você várias formas de ativar o upload assíncrono. Vou exemplificar aqui 3 formas dentre as várias possíveis:

4.1) Uso básico. Você chama o upload a partir de um button (ou um input-type-button) em um form qualquer:

<legend>Uso b&aacute;sico</legend>
  <form>
	<input type="file" name="nome_qualquer" />
	<div id="recebe_up_basico" class="recebe">&nbsp;</div>
	<button onclick="micoxUpload(this.form,'upa.php','recebe_up_basico','Carregando...','Erro ao carregar'); return false;" type="button">testa</button>
  </form>
</fieldset>


4.2) Ativando o upload quando o campo file perde o foco (onblur):

<fieldset>
<legend>Uso no blur do input</legend>
  <form>
	<input type="file" name="nome_qualquer" onblur="micoxUpload(this.form,'upa.php','recebe_up_onblur','Carregando...','Erro ao carregar')" />
	<div id="recebe_up_onblur" class="recebe">&nbsp;</div>
  </form>
</fieldset>


4.3) Agora uma forma que deixará seu form/upload acessível mesmo que o javascript esteja desabilitado:

<fieldset>
<legend>Uso não intrusivo</legend>
	<form action="upa.php" target="_blank">
	<input type="file" name="nome_qualquer" onblur="micoxUpload(this.form,'upa.php','recebe_up_3','Carregando...','Erro ao carregar')" />
	<div id="recebe_up_3" class="recebe">&nbsp;</div>
  </form>
</fieldset>


Pronto. Customize aí agora e bora "uploadar". Bugs, erros, comenta ae.
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   Ugo Stoso Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 22
  • Cadastrado: 09-março 07

Ícone  Postou 22 março 2007 - 12:05

Grande Micox, abaixo está o código que estou usando para fazer o upload com a sua função, comigo não está funcionando, a página destino até é chamada mas os valores dos inputs não vão juntos.
A página Login.asp
<!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></title>
		<META http-equiv="Content-Type" content="text/html;" charset="iso-8859-1">
		<script src="js/micoxUpload.js" type="text/javascript"></script>
		<script src="js/micoxAjax.js" type="text/javascript"></script>
		<script language="javascript" type="text/javascript">
			function Logar()
			{   if(document.getElementById) { // Para os browsers complacentes com o DOM W3C.
					var mensagem=document.getElementById('divMensagem');
					var exibeResultado = document.getElementById('divMsg'); // div que exibirá a mensagem.
					var login=document.getElementById('txtLogin');
					var senha=document.getElementById('txtSenha');
					//var CaminhoRetorno = 'include/Logar.asp?Login='+login.value+'&Senha='+senha.value;
					//alert(CaminhoRetorno);return false;
					var CaminhoRetorno = 'include/Logar.asp';
					
					if(!login.value||!senha.value)
					{	alert('Você deve informar seu login e senha corretamente,\ntodos os campos são de preenchimento\nobrigatório.');
						login.focus;
						return false;}
					else if(senha.length<8)
					{	alert('Senha menor que o mínimo permitido\nverifique se você está digitando a senha correta\ne tente novamente.');
						senha.value='';
						senha.focus;
						return false;}
					else
					{	mensagem.style.position='absolute';
						mensagem.style.left=0;
						mensagem.style.top=0;
						//mensagem.grow({to:{height:50,width:200}});
						//mensagem.fadeIn();
						mensagem.style.display='block';
						//ajaxGet(CaminhoRetorno,exibeResultado,true);
						micoxUpload('frmLogin',CaminhoRetorno,'divMsg','Carregando...','Erro ao carregar'); return false;
						//return true;
					}
				}
			}
		</script>
	</head>
	<body id="body">
		<form id="frmLogin" action="include/Logar.asp" method="post">
			<div id="divLogar" style="Display:<%=divL%>;" class="Login">
				<table border="0" cellpadding="2" cellspacing="0" class="conteudo">
					<tr><td colspan="2" align="center" valign="top" class="TituloTela">Informe sua Conta.</td></tr>
					<tr><td>Login:</td>
						<td><input type="text" name="txtLogin" id="txtLogin" maxlength="20" /></td>
					</tr>
					<tr><td>Senha:</td>
						<td><input type="password" name="txtSenha" id="txtSenha" maxlength="10" /></td>
					</tr>
					<tr><td colspan="2">
							<input type="button" id="btnEntrar" value="Função" onclick="return Logar();" />&nbsp;
							<input type="submit" name="subEntrar" id="subEntrar" value="Submit">
						</td>
					</tr>
				</table>
			</div>
		</form>
	</body>
</html>

E a página logar.asp
<%Dim Login, Senha, teste1, teste2
	Login = Request.QueryString.Item("login")
	Senha = Request.QueryString.Item("senha")
	
	teste1 = Request.Form.Item("txtLogin")
	Senha = Request.Form.Item("txtSenha")
	
	Response.Write (login&" === "&Senha&" ---- "&teste1&" +++ "&teste2)
	Response.End%>
:graduated:
Onde estou errando?
Um grande abraço. Desde já agradecendo a atenção e krak, suas funções são muito maneiras.
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 23 março 2007 - 03:23

Cara, procurei o elemento 'divMsg' no seu código e não encontrei.
Acredito que o problema esteja aí.

(Você está usando o Firefox pra exibir os erros de javascript ou té testando no IEca? )
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   Ugo Stoso Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 22
  • Cadastrado: 09-março 07

Ícone  Postou 23 março 2007 - 03:33

Ver postMicox, em 23/03/2007 - 15:23, disse:

Cara, procurei o elemento 'divMsg' no seu código e não encontrei.
Acredito que o problema esteja aí.

(Você está usando o Firefox pra exibir os erros de javascript ou té testando no IEca? )



É q eu alterei várias vezes e devo ter me esquecido, estou usando o FireFox com o debug, mesmo com essa div o problema continua, essa div fica dentro da divMensagem. :graduated:
0

#5 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 23 março 2007 - 04:06

Então posta o novo código ae pra eu testar.

Ah, e faz o seguinte também: testa submeter o form sem usar minha função, pois pode ser que o erro esteja no ASP.
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

#6 Membro offline   Ugo Stoso Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 22
  • Cadastrado: 09-março 07

Ícone  Postou 30 março 2007 - 05:48

Ver postMicox, em 23/03/2007 - 16:06, disse:

Então posta o novo código ae pra eu testar.

Ah, e faz o seguinte também: testa submeter o form sem usar minha função, pois pode ser que o erro esteja no ASP.


Eu testei com e sem o código, bom, sem o código funciona, eu consigo fazer o submit, com o seu código eu não consigo, segue abaixo os códigos...

arquivo1.asp
<!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>Controle</title>
		<%=Application("MetaTags")%>
		<link rel="stylesheet" type="text/css" href="../Css/Generali.css" title="Generali css" />
		<script src="../js/MicoxAjax.js" type="text/javascript"></script>
		<script src="../js/micoxUpload.js" type="text/javascript"></script>
		<script language="javascript" type="text/javascript">
			function PegaGrupo()
			{   ajaxGet('../include/PegaGrupo.asp',document.getElementById('selGrupo'),true);
				ajaxGet('../include/PegaUsuario.asp',document.getElementById('selUsuario'),true);
			}
			function AdicionaUsuario(origemId,destinoId)
			{   var origem  =document.getElementById(origemId);
				//var opcoes  =origem.length;
				var indice  =origem.selectedIndex;
				var valor   =origem.options[indice].value;
				var texto   =origem.options[indice].text;
				var destino =document.getElementById(destinoId);
				destino.options[destino.length] = new Option(texto,valor);
				origem.remove(indice);
			}
			function RemoveUsuario(origemId,destinoId)
			{   var origem  =document.getElementById(origemId);
				//var opcoes  =origem.length;
				var indice  =origem.selectedIndex;
				var valor   =origem.options[indice].value;
				var texto   =origem.options[indice].text;
				var destino =document.getElementById(destinoId);
				destino.options[destino.length] = new Option(texto,valor);
				origem.remove(indice);
			}
			function MontaLista(origemId,destinoId)
			{   var origem  =document.getElementById(origemId);
				var opcoes  =origem.length;
				for(var i=0;i<opcoes;i++)
				{   var valor  =origem.options[i].value;
					var texto  =origem.options[i].text;
					var destino=document.getElementById(destinoId);
					destino.options[destino.length] = new Option(texto,valor);
				}
			}
			function AbreFecha(id)
			{   var objeto=document.getElementById(id);
				if(objeto.style.display=='none')
				{   objeto.style.display='block';
					MontaLista('selAdicionado','selSupervisores');
				}
				else
					objeto.style.display='none';
			}
			function EnviarListas()
			{   var membros =document.getElementById('selAdicionado');
				var opcoes  =membros.length;
				var valmem  ='';
				for(var i=0;i<opcoes;i++)
				{   valmem+=membros.options[i].value;
					if(i<opcoes)
					valmem+=',';
				}
				
				opcoes = '';
				var supervisores=document.getElementById('selSuperAdicionados');
				opcoes		  =supervisores.length;
				var valsup	  ='';
				for(var i=0;i<opcoes;i++)
				{   valsup+=supervisores.options[i].value;
					if(i<opcoes)
					valsup+=',';
				}
				document.getElementById('membros').value=valmem;
				document.getElementById('supervisores').value=valsup;
				var caminho = '../include/arquivo2.asp';
				alert(valmem);alert(valsup);
				document.frmGMS.submit();
				//micoxUpload('frmGMS',caminho,'divMsg','Carregando...','Erro ao carregar'); return false;
			}
		</script>
	</head>
	<body onload="PegaGrupo();">
		<form id="frmGMS" action="../include/arquivo2.asp" name="frmGMS" method="post">
			<input type="hidden" name="membros" id="membros" value="" />
			<input type="hidden" name="supervisores" id="supervisores" value="" />
			<table border="0" cellpadding="2" cellspacing="0">
				<tr><td align="center" colspan="2" class="TituloTela">Cadastro de Membros e Supervisores</td></tr>
				<tr><td colspan="2">Grupo: <select id="selGrupo" onchange="document.getElementById('trMembros').style.display='block';"></select></td></tr>
				<tr id="trMembros" style="Display:none;">
					<td>Usuários disponíveis<br />
						<select id="selUsuario" onchange="AdicionaUsuario('selUsuario','selAdicionado');" multiple="multiple" class="Lista"></select></td>
					<td>Usuários Selecionados<br />
						<select id="selAdicionado" onchange="RemoveUsuario('selAdicionado','selUsuario');" multiple="multiple" class="Lista"></select></td>
				</tr>
				<tr><td colspan="2" align="left"><input type="button" id="bntSupervisores" name="bntSupervisores" value="Supervisores" onclick="AbreFecha('trSupervisores');" /></td></tr>
				<tr id="trSupervisores" style="Display:none;">
					<td><select id="selSupervisores" onchange="AdicionaUsuario('selSupervisores','selSuperAdicionados');" multiple="multiple" class="Lista"></select></td>
					<td><select id="selSuperAdicionados" onchange="RemoveUsuario('selSuperAdicionados','selSupervisores');" multiple="multiple" class="Lista"></select></td>
				</tr>
				<tr><td colspan="2" align="left">
						<input type="button" name="bntSalvar" id="bntSalvar" value="Salvar" onclick="EnviarListas();" />
						<input type="submit" name="subTeste" id="subTeste" value="teste..." />
					</td>
				</tr>
			</table>
			<div id="divMsg"></div>
		</form>
	</body>
</html>


Arquivo2.asp
<%Dim lista
lista = Request("membros")
Response.Write "teste "
Response.Write (lista)
%>


Vlw Micox.
0

#7 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 30 março 2007 - 05:55

Ok Ugo
Vou ver se acho um tempo no FDS pra olhar seu problema. :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

#8 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 04 abril 2007 - 02:42

Cara, é simples.

O caminho do upload passado na minha função deve ser um caminho absoluto, com http:// e talz.

Então te aconselho a trocar a action do form de:
action="http://seuservidor.com.br/suapasta/include/arquivo2.asp"

E trocar a variável caminho que tem na função EnviarLista para:
var caminho = document.getElementById('frmGMS').action;
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

#9 Membro offline   Ugo Stoso Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 22
  • Cadastrado: 09-março 07

Postou 05 abril 2007 - 04:47

Ver postMicox, em 04/04/2007 - 14:42, disse:

Cara, é simples.

O caminho do upload passado na minha função deve ser um caminho absoluto, com http:// e talz.

Então te aconselho a trocar a action do form de:
action="http://seuservidor.com.br/suapasta/include/arquivo2.asp"

E trocar a variável caminho que tem na função EnviarLista para:
var caminho = document.getElementById('frmGMS').action;



Fala Micox. Cara, não sei porque mas não quer funcionar aqui.

eu fiz as alterações que você pediu e tal
var caminho = document.getElementById('frmGMS').action;
  form action="http://servidor/novo/include/Grupo/MembrosSupervisores.asp"


A página que recebe os dados do formulário está pegando assim:

Grupo = Request.Form.Item("selGrupo")
 Membros = Split(Request.Form.Item("membros"),",")
 Supervisores = Split(Request.Form.Item("Supervisores"),",")
 
 If Grupo <> "" Then
	 começa tudo e retorna as msgs.


só q ele não pega os valores passados, se eu der response.write em grupo por exemplo vai retornar vazio.
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 09 abril 2007 - 04:36

CAra, o que eu passei não tem erro. Vc tá fazendo alguma barbeiragem aí.
posta o código novamente.
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   Ugo Stoso Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 22
  • Cadastrado: 09-março 07

Postou 10 abril 2007 - 10:58

Ver postMicox, em 09/04/2007 - 16:36, disse:

CAra, o que eu passei não tem erro. Vc tá fazendo alguma barbeiragem aí.
posta o código novamente.


Tô postando...

Arquivo1.asp
<!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>Controle</title>
		<%=Application("MetaTags")%>
		<link rel="stylesheet" type="text/css" href="http://meuservidor/Css/estivo.css" title="Generali css" />
		<script src="http://meuservidor/js/MicoxAjax.js" type="text/javascript"></script>
		<script src="http://meuservidor/js/micoxUpload.js" type="text/javascript"></script>
		<script src="http://meuservidor/js/Controle.js" type="text/javascript"></script>
	</head>
	<body onload="PegaGrupo();">
		<form id="frmGMS" action="http://meuservidor/include/Grupo/MembrosSupervisores.asp" name="frmGMS" method="post" target="ifrmPrincipal">
			<input type="hidden" name="membros" id="membros" value="" />
			<input type="hidden" name="supervisores" id="supervisores" value="" />
			<table border="0" cellpadding="2" cellspacing="0">
				<tr><td align="center" colspan="2" class="TituloTela">Cadastro de Membros e Supervisores</td></tr>
				<tr><td colspan="2">Grupo: <select name="selGrupo" id="selGrupo" onchange="ChecaGrupo();"></select></td></tr>
				<tr id="trMembros" style="Display:none;">
					<td>Usuários disponíveis<br />
						<select name="selUsuario" id="selUsuario" onchange="AdicionaUsuario('selUsuario','selAdicionado');" multiple="multiple" class="Lista"></select></td>
					<td>Usuários Selecionados<br />
						<select name="selAdicionado" id="selAdicionado" onchange="RemoveUsuario('selAdicionado','selUsuario');" multiple="multiple" class="Lista"></select></td>
				</tr>
				<tr><td colspan="2" align="left"><input type="button" id="bntSupervisores" name="bntSupervisores" value="Supervisores" onclick="AbreFechaMembros('trSupervisores');" /></td></tr>
				<tr id="trSupervisores" style="Display:none;">
					<td><select name="selSupervisores" id="selSupervisores" onchange="AdicionaUsuario('selSupervisores','selSuperAdicionados');" multiple="multiple" class="Lista"></select></td>
					<td><select name="selSuperAdicionados" id="selSuperAdicionados" onchange="RemoveUsuario('selSuperAdicionados','selSupervisores');" multiple="multiple" class="Lista"></select></td>
				</tr>
				<tr><td colspan="2" align="left">
						<input type="button" name="bntSalvar" id="bntSalvar" value="Salvar" onclick="return EnviarListas();" />
						<!-- input type="submit" name="subTeste" id="subTeste" value="teste..." / -->
					</td>
				</tr>
			</table>
			<div id="divMsg"></div>
		</form>
	</body>
</html>


O script da página
/**************************************
 * Controle de membros e supervisores 
 * ***********************************/
//Monta os selects de grupos e usuários
function PegaGrupo()
{   ajaxGet('http://meuservidor/include/Grupo/PegaGrupo.asp',document.getElementById('selGrupo'),true);
	ajaxGet('http://meuservidor/include/Grupo/PegaUsuario.asp',document.getElementById('selUsuario'),true);
}
//Verifica os usuários que pertencem ao grupo selecionado
function ChecaGrupo()
{   var grupo   =document.getElementById('selGrupo');
	var indice  =grupo.selectedIndex;
	var valor   =grupo.options[indice].value;//Pega o id do grupo selecionado
	document.getElementById('trMembros').style.display='block';//Abre a área de alterações
	ajaxGet('http://meuservidor/include/Grupo/UsuariosGrupo.asp?Grupo='+valor,document.getElementById('selAdicionado'),true);//Faz a chamada e retorna os usuários do grupo
	/********************************************************************************************
	* Local de origem do passo abaixo:														  *
	* http://www.baboo.com.br/absolutenm/templates/content.asp?articleid=4678&zoneid=24&resumo= *
	********************************************************************************************/
	var origem=document.getElementById('selAdicionado');
	for(var i=0; i<=origem.options.length; i++)//Remove os usuários do grupo da lista de usuários disponíveis
	{   //var Op = document.createElement("OPTION");
		//Op.text = origem.options[i].text;
		//Op.value = origem.options[i].value;
		var destino =document.getElementById('selUsuario');
		destino.remove(i);
	}
}
//Adiciona usuários na lista de selecionados
function AdicionaUsuario(origemId,destinoId)
{   var origem  =document.getElementById(origemId);
	//var opcoes  =origem.length;
	var indice  =origem.selectedIndex;
	var valor   =origem.options[indice].value;
	var texto   =origem.options[indice].text;
	var destino =document.getElementById(destinoId);
	destino.options[destino.length] = new Option(texto,valor);
	origem.remove(indice);
}
//Remove usuários da lista de usuários selecionados
function RemoveUsuario(origemId,destinoId)
{   var origem  =document.getElementById(origemId);
	//var opcoes  =origem.length;
	var indice  =origem.selectedIndex;
	var valor   =origem.options[indice].value;
	var texto   =origem.options[indice].text;
	var destino =document.getElementById(destinoId);
	destino.options[destino.length] = new Option(texto,valor);
	origem.remove(indice);
}
//Monta a lista de supervisores com os usuários selecionados e verifica se existe algum supervisor para o grupo selecionado
function MontaLista(origemId,destinoId)
{   var origem  =document.getElementById(origemId);
	var opcoes  =origem.options.length-1;
	var i=0;
	
	while(i<=opcoes)
	{   var valor  =origem.options[i].value;
		var texto  =origem.options[i].text;
		var destino=document.getElementById(destinoId);
		if(valor!=''||texto!='')
		destino.options[destino.options.length] = new Option(texto,valor);
		i++;
	}
	if(opcoes>0)
	{   var grupo   =document.getElementById('selGrupo');
		var indice  =grupo.selectedIndex;
		var valor   =grupo.options[indice].value;
		
		ajaxGet('http://meuservidor/include/Grupo/SupervisoresGrupo.asp?Grupo='+valor,document.getElementById('selSuperAdicionados'),true);
		var supervisores=document.getElementById('selSuperAdicionados');
		supervisores=supervisores.options.length-1;
		
		for(var i=0; i<=supervisores; i++)
		{   //var Op = document.createElement("OPTION");
			//Op.text = origem.options[i].text;
			//Op.value = origem.options[i].value;
			var membros =document.getElementById('selSupervisores');
			membros.remove(i);
		}
	}
}
//Abre e feha a parte de supervisores, se estiver aberta serão gravados os supervisores selecionados
function AbreFechaMembros(id)
{   var objeto=document.getElementById(id);
	if(objeto.style.display=='none')
	{   objeto.style.display='block';
		MontaLista('selAdicionado','selSupervisores');
	}
	else
		objeto.style.display='none';
}
//Envia a lista de informações para serem gravadas nas devidas tabelas.
function EnviarListas()
{   var membros =document.getElementById('selAdicionado');
	var opcoes  =membros.length-1;
	var valmem  ='';
	
	if(opcoes!=-1)
	{   for(var i=0;i<=opcoes;i++)
		{   valmem+=membros.options[i].value+',';}
		valmem=valmem.substring(0,valmem.length-1);
		document.getElementById('membros').value=valmem;
		
		if(document.getElementById('trSupervisores').style.display='block')
		{   opcoes = '';
			var supervisores=document.getElementById('selSuperAdicionados');
			opcoes		  =supervisores.length-1;
			var valsup	  ='';
			
			for(var i=0;i<=opcoes;i++)
			{   valsup+=supervisores.options[i].value+',';}
			valsup=valsup.substring(0,valsup.length-1);
			document.getElementById('supervisores').value=valsup;
		}
		
		var confirmar=confirm('Você está para alterar a configuração de membros e supervisores.\nDeseja continuar?')
		if(confirmar)
		{   var caminho = document.getElementById('frmGMS').action;
			//document.frmGMS.submit();
			micoxUpload('frmGMS',caminho,'divMsg','Carregando...','Erro ao carregar'); return false;
		}
		return true;
	}
	else
	{alert('Você deve selecionar pelo menos um membro para poder continuar');return false;}
}
/**************************************
 * Controle de membros e supervisores
 * ***********************************/


E o arquivo2.asp
<%Dim Membros, Supervisores, Grupo, i, SqlMembros, SqlSupervisores
Grupo = Request.Form.Item("selGrupo")
Membros = Split(Request.Form.Item("membros"),",")
Supervisores = Split(Request.Form.Item("Supervisores"),",")

If Grupo <> "" Then
	Response.write(Grupo)
End If%>


Não sei oq posso estar fazendo de errado mas é este o código que estou usando, o botão de submit funciona mas comigo a função não está funcionando.

Desde já agradeço a atenção aí e tudo mais.

Um grande abraço. Valeu Micox.
0

#12 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 10 abril 2007 - 11:11

Não falei que tava fazendo barbeiragem? heuaehauhe :rindo:

Olha isso aqui:
var caminho = document.getElementById('frmGMS').action;
			//document.frmGMS.submit();
			micoxUpload('frmGMS',caminho,'divMsg','Carregando...','Erro ao carregar'); return false;


Aquela variável caminho tá fazendo o que alí sendo que não está sendo usada em lugar nenhum???
Advinha onde voce vai usar ela?
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

#13 Membro offline   Alexandre Fabre Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 16
  • Cadastrado: 25-abril 07
  • Localização:Rio de Janeiro

Postou 23 maio 2007 - 02:49

E aí Micox Blz!!! olha eu aqui também... mais uma vez lhe peço um Help :wacko: ...meu mestre!!! :graduated:

Naquele site que estou desenvolvendo e pedi sua ajuda em outro tópico (Flash/Ajax e html - http://forum.ievolut...showtopic=11630), estou precisando resolver esta parte com mais urgência. Há uma página que funciona como uma store e estou usando o seu Upload Assíncrono. Em PHP criei uma espécie de loja (store.php) onde o cliente escolhe o produto que deseja, e a quantidade, após a escolha ele clica no carrinho de compras e os valores são enviados para uma segunda página (produtos.php) onde aparece os produtos escolhidos pelo cliente com seus valores individuais, total de cada produto e o total geral. Até aí funciona perfeitamente. Após a verificação, o cliente confirma os dados e aí vai para a página de confirmação, onde ele entra com seus dados para efetivar a solicitação do produto. Minha dúvida é como faço para que a página carregue de maneira com que o botão da página anterior não fique na página seguinte carregada, visto que conforme os exemplos que você passou, o botão fica fora da DIV, e se coloco o botão dentro da DIV, a página não carrega.

Usei esta estrutura sua:
<legend>Uso b&aacute;sico</legend>
<form>
<input type="file" name="nome_qualquer" />
<div id="recebe_up_basico" class="recebe">&nbsp;</div>
<button onclick="micoxUpload(this.form,'upa.php','recebe_up_basico','Carregando...','Erro ao carregar'); return false;" type="button">testa</button
</form>
</fieldset>


Na index.html chamei a função:
<script src="micoxUpload.js" type="text/javascript"></script>


A página store.php é chamada para a index na div id="recebe" com a sua função micoxAjax.js

Estrutura do formulario da store.php
<form action="carrinho.php" method="post" name="frmcarrinho">
<div id="recebestore" class"recebe">
<input type="hidden" name="opc_efetivar" value="1">
<table width="90%"  border="0" align="center" cellpadding="0" cellspacing="0">Conteúdo do formulário</table>
</div>
<table width="100%" border="0"><td width="98%" align="right" valign="bottom" scope="col">
<input name="image" type="image" onclick="micoxUpload (this.form,'carrinho.php','recebestore','Carregando...','Erro ao carregar');return false;"src="images/carrinho.gif"></td>
<td>&nbsp;</td>
</tr></table>
</form>


Cara se você o outra pessoa puder me ajudar... vai me tirar do sufoco, pois estou desenvolvendo este site para uma pessoa que me deixa maluco com os seus pedidos... :cursing:
* PS.: A função micoxAjax.js não está funcionando no IEca 7. Você consegui entender qual "M.." talvez eu tenha feito ???

Valeu!!!
0

#14 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 23 maio 2007 - 08:46

Cara, não entendi sua dúvida e nem entendi onde o Upload entra na história :(


//Sobre o IE7 fica difícil pra ajudar pois não tenho o IE 7
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

#15 Membro offline   Alexandre Fabre Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 16
  • Cadastrado: 25-abril 07
  • Localização:Rio de Janeiro

Postou 26 maio 2007 - 11:37

Ver postMicox, em 23/05/2007 - 08:46, disse:

Cara, não entendi sua dúvida e nem entendi onde o Upload entra na história :(


//Sobre o IE7 fica difícil pra ajudar pois não tenho o IE 7


Quanto ao problema do IEca7 descobri que o propblema está na função do Botão voltar do Bernardo, eu a estou usando juntamente com a sua função "micoxAjax", ja pedi que ele desse uma olhada, só estou com problema no Css no IEca7 que não está funcionando com sua função, mas ainda não parei para ver se consigo resolver o problema.

Quanto a sua função upload, eu a estou usando para submeter um formulário (store) que está sendo carregado pela sua função ajax dentro da DIV id="recebe". O formulário funciona conforme informei acima, criei um formulário, loja (store.php), onde o cliente escolhe o produto que deseja, e a quantidade, após a escolha ele clica no carrinho de compras e os valores são submetidos para uma segunda página (produtos.php) que é carregada dentro da mesma DIV, "recebe", onde aparece os produtos escolhidos pelo cliente com seus valores individuais, total de cada produto e o total geral. Até aí funciona perfeitamente, mas o botão de envio formulário da página anterior permanece dentro da Div, já que ele fica fora do "form". Após a verificação, o cliente confirma os dados e aí a página de confirmação era para ser carregada dentro da Div recebe onde ele entra com seus dados para efetivar a solicitação do produto, mas a página está abrindo em uma nova página ao invés de abrir dentro da Div. Usei a função do Pita "ajaxForm" mas está ocorrendo a mesma coisa com a terceira página, abre em uma nova página fora da Div. Tendo em vista os comentários que não é muito seguro trabalhar com dados pelo ajax, tentei usar a sua função upload, que não é ajax, mas funciona como.
0

  • (3 Páginas)
  • +
  • 1
  • 2
  • 3


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)