Jump to content
Tesla

JavaScript + ASP = DOR DE CABEÇA!

Recommended Posts

Tesla

Ora bem... então é o seguinte:

estou a criar uma aplicação com base em ASP + SQL Server. Neste momento deparei-me com uma situação de criação de uma listbox de acordo com a selecção feita noutra listbox.

Para resolver este problema, decidi criar um código misto de Javascript e ASP que me permite puxar todos os dados necessários para a página e assim fazer tudo apartir do cliente, indo uma unica vez ao servidor recolher informação. Long story short: estou a usar o JS + ASP para criar um código JS que a página leia de forma a actualizar a segunda listbox de acordo com a primeira... o código...

<script language="javascript">

function codigos(teste) 
{
document.encomenda.codigo.options.length = 0;

<% Set conn1 = Server.CreateObject("ADODB.Connection")
   conn1.open "cat", "publico", "cena"
   Set rst1 = Server.CreateObject("ADODB.Recordset")
   sql = "SELECT DISTINCT cliente FROM [dados]"
   rst1.Open sql, conn1, 3, 3
   rst1.movefirst

   Set conn2 = Server.CreateObject("ADODB.Connection")
   conn2.open "cat", "publico", "cena"
   Set rst2 = Server.CreateObject("ADODB.Recordset")
   sql1 = "SELECT cliente, codigo FROM [dados]"
   rst2.Open sql1, conn2, 3, 3
   rst2.movefirst
%>



switch (teste)
{
<% do until rst1.EOF
	contador=1	 %>

	case "<%=Rtrim(rst1.fields("cliente"))%>" :
		<% do until rst2.EOF %>
		<% if Rtrim(rst1.fields("cliente")) = Rtrim(rst2.fields("cliente")) then %>
		document.encomenda.codigo.options[<%=contador%>]=new Option("<%=Rtrim(rst2.fields("codigo"))%>","<%=Rtrim(rst2.fields("codigo"))%>");

		<% contador= contador+1
		   end if
		   rst2.movenext
		   loop %>
	break;
   <% rst1.movenext
      rst2.movefirst		
      loop 
      rst1.movefirst%>

	default : 
		document.encomenda.codigo.options[0]= new Option("CL","Escolha Código");
}		

return true;		

}




</script>

Isto cria o meu código JS com utilização predominante do switch. Acontece que quando os case são muitos ou têm muitas linhas dentro de cada um, o código flipa e já não faz nada. Se só mantiver as connexões  às BD's e colocar um alert para saber se o parametro passou... já funciona às mil maravilhas!

Estou a ficar frustrado... muito mesmo!  ;)

Obrigado pelo v/ feedback.


Assinatura editada pelo staff, por favor consulte as regras.

Share this post


Link to post
Share on other sites
jsWizard

Sem te responder aos teus stresses.. aqui ficam duas sugestões de borla ;)

1 - não estejas sempre a abrir <% e a fechar %> .. é pouco eficiente.. a interpretação da página está sempre a mudar de handler. E além disso o código fica um bocado "feio".. difícil de ler. Tenta usar Response.Write( … )

2 - porque usas os ciclos dos cursores da bd para gerar JavaScript para preencher combos.. e não os usas logo para escrever <options> para as combos directamente?

quanto à tua última afirmação.. só te posso dizer que o código que é executado no cliente (browser) não tem qualquer relação com a conecção à BD... é algo que corre no browser e não tem nada a ver com a BD e qualquer coisa assim... o browser não tem "consciência" da existência de BDs ou cenas assim

só olhei para o teu código na diagonal.. se tiver mais um tempinho depois vejo isso melhor

Espero ter ajudado :)

Share this post


Link to post
Share on other sites
Tesla

Obrigado pelo feedback.

Hoje só vou perder 1 hora com isto. Já ando à dois dias de volta do problema e cada vez me parece mais um beco sem saída... ainda que saiba que não o é!

Depois de tentar a sugestão de limpeza do código reporto qualquer coisa.

Até lá, qualquer outra ideia que permita ultrapassar este problema, é extremamente bem vinda.

Obrigado. ;)


Assinatura editada pelo staff, por favor consulte as regras.

Share this post


Link to post
Share on other sites
Tesla

E nem de propósito... uma hora depois de ter começado, resolvi o problema.

switch(teste)
{
	<%
	   	do until rst1.EOF
			contador=0
			response.write("case '"&RTrim(rst1.fields("cliente"))&"' :")
			do until rst2.EOF
				if RTrim(rst1.fields("cliente")) = RTrim(rst2.fields("cliente")) then
					response.write("document.encomenda.codigo.options["&contador&"]= new 

Option('"&Rtrim(rst2.fields("codigo"))&"','"&Rtrim(rst2.fields("codigo"))&"');")
					contador=contador+1
				end if
				rst2.movenext
				loop
		response.write("break;")
		rst2.movefirst
		rst1.movenext
		loop
		rst1.movefirst %>

	default : 
		document.encomenda.codigo.options[0]= new Option('Escolha Código','CL');
}		

Obrigado Rui! ;-)


Assinatura editada pelo staff, por favor consulte as regras.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.