Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Doxonjrj

Ajax com XML HTTP com conexão a banco de dados

Recommended Posts

Vou tentar explicar a minha dúvida, um pouco complicado, mas vamos lá:

 

1 - Tenho uma página de produtos, que conecta ao banco de dados e traz todos os produtos que temos disponíveis, que hoje são apenas 15.

2 - Para a página de produtos temos a HOME (principais produtos), a PRODUTOS CATEGORIA (produtos por categoria), e a detalhes do produto.

3 - O usuário quando entra na página acessa primeiramente a HOME, depois ele pode navegar entre as outras.

4 - As nossas páginas de produtos (layouts), podem mudar constantemente, então pensei em criar um arquivo XSLT, de layout, o template das páginas

 

A minha idéia foi, o usuário ao acessar a página HOME já irá trazer todos os produtos diretament do banco de dados mas mostrar apenas os produtos da HOME, mas quando navegar para as outras páginas (que possuem outros layouts e são fisicamente outras páginas), não gostaria de conectar novamente no banco de dados para trazer os produtos e manipular os mesmos para a categoria escolhida pelo usuário agora.

 

PEnsei então em utilizar um objAjax, o qual posso manipular um arquivo XML não gerado fisicamente, então criei os seguintes arquivos:

 

1 - index.asp (página que possui o layout comum a todas as páginas de produtos e que também chama a função CARREGA.XML)

2 - listagem.asp (página que conecta no banco de dados e retorna um record set, o qual monta um XML)

3 - function.js (página com todas as funções Ajax para manipulação dos dados.

 

A minha pergunta é:

 

1 - Nesta parte do código que entra-se na página function.js, toda vez que esta página for chamada a página que faz a pesquisa no banco de dados será executada para a montagem do XML?

 

xmlhttp.open('GET','listagem.asp',true);

2 - Se sim, existe alguma maneira de ela ser chamada apenas quando o XML estiver sendo chamado pela página principal, mas poder ser manipulado pelas outras páginas sem problemas?

 

3 - Se eu for utilizar uma página XSLT, onde seria melhor inserir o código dela, dentro do arquivo FUNCTION.JS, ou seria melhor na página principal? OU ainda, acham ideal eu utilizar este tipo de arquivo ou teriam uma outra idéia?

 

Se alguém já tiver passado por algo igual e puder me ajudar eu agradeço, abs.

 

Abaixo segue o código de cada uma das páginas

 

INDEX.ASP

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Teste para carregamento de XML</title>
</head>

<!-- CHAMADA DA FUNÇÃO AJAX-->
<script language="javascript" type="text/javascript" src="function.js"></script>

<script>
//FUNÇÃO INICIA QUE CARREGA OS PRODUTOS
function carregaXML()
{	
	var tabela = 'tabelaPrincipal';					//NOME DA DIV
	
	//EXECUTA A FUNÇÃO DA CONSULTA EM AJAX
	loadProdutos(tabela);
}
</script>

<body onload="carregaXML();">

<h2>Ajax (XML e JavaScript)</h2>
<div id="carregando" style="font:Verdana; color:#FFFFFF; background-color:#DD0000; width:180px;">
	Carregando...
</div>

<table border="0">
	<tr>
		<td>Resgistro</td>
	</tr>
	<form>
		<tr>
			<td>	
				<select id="regPag" onChange="java script:listar(1);">
					<option value="1">Categoria 01</option>
					<option value="2">Categoria 02</option>
					<option value="3">Categoria 03</option>
				</select>
			</td>
		</tr>
	</form>
</table> 

<a href="java script:carregaXML();">teste</a>

<br>
<!-- TABELA AONDE IREMOS EXIBIR OS REGISTROS -->
<table id="tabelaPrincipal" border="1" cellpadding="0" cellspacing="0">
	<tr></tr>
</table>



</body>
</html>

LISTAGEM.ASP

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!-- METADATA TYPE="typelib" Uuid="00000200-0000-0010-8000-00AA006D2EA4" NAME="ADO Type Library"-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<%
'============================
'	DECLARANDO AS VARIÃVEIS
'============================

'=================================================
'	SETANDO CONEXÕES COM O BANCO DE DADOS
'=================================================
Set objCmd  = Server.CreateObject("ADODB.Command")
Set objCn = Server.CreateObject("ADODB.Connection")
Set rsLista = Server.CreateObject("ADODB.RecordSet")

'=============================
'	LINK DE CONEXÃO DO BANCO
'=============================
strSQL = "USP_TB_CANDIDATO_PRODUTO_S003"

objCn.Open "File name=c:\cemp.udl"

'==========================================
'	EFETUANDO A CONSULTA NO BANCO DE DADOS
'==========================================
With objCmd
	.CommandText = strSQL
	.CommandType = adCmdStoredProc
	Set .ActiveConnection = objCn
	
	.Parameters.Append .CreateParameter("@RETURN_VALUE", adInteger, adParamReturnValue,0)
	.Parameters.Append .CreateParameter("@ID_SESSION_USUARIO", adInteger, adParamInput, 4, 123)
	.Parameters.Append .CreateParameter("@TB_TIPO_PRODUTO_CODIGO", adInteger, adParamInput, 4, 1)
	.Parameters.Append .CreateParameter("@TB_POSTO_AUTORIZADO_NOVO_CODIGO", adInteger, adParamInput, 4, 1)
	
End With


With rsLista
	.CursorLocation = adUseClient
	.Open objCmd ', , adOpenDynamic, adLockReadOnly
	Set .ActiveConnection = Nothing
	
End With


'********************************
'IDENTIFICA O CONTEUDO COMO XML
'********************************	
Response.ContentType="text/xml"
Response.Charset ="iso-8859-1"
	
'********************************
'IDENTIFICA O NAVEGADOR
'********************************		
If InStr(1,Request.ServerVariables("HTTP_USER_AGENT"),"MSIE") = 0 Then
	'********************************
	'SE NÃO FOR IE NÃO EXECUTA NADA
	'********************************
else
	'**************************************
	'SE FOR COMPLEMENTA O XML COM A VERSÃO
	'**************************************
%>
	<?xml version="1.0" encoding="iso-8859-1" ?> 
<% 
end if
%>	

<!-- GERANDO O XML -->
<loja>
<%	
	while not rslista.EOF 
%>
		<produto cod_loja="<%=rsLista("COD_LOJA")%>" titulo_produto="<%=rsLista("TITULO_PRODUTO")%>"></produto> 
<%		
		rsLista.movenext
	wend 	
%>
	</loja>	

<%

FUNCTION.JS

 

function loadProdutos(tabela){

	alert('teste2');
	
	// CRIA VARIÁVEL QUE RECEBE OS VALORES BOLEANOS
	var xmlhttp		= false;
	
	//CRIA A VARIÁVEL QUE RECEBE O ID DA DIV
	elt = document.getElementById(tabela);
	
	//LIMPA O DOCUMENTO
	elt.innerHTML = '';
	
	//FAZ A VERIFICAÇÃO DO NAVEGADOR IE PARA CRIAR O OBJETO AJAX
	try{
		xmlhttp = new ActiveXObject("Msxmll2.XMLHTTP");
	}	catch(e){
			try{
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(E){
				xmlhttp = false;
			}
	}
	
	// SE NÃO FOR IE CRIA O AJAX PELO JAVA SCRIPT
	if(!xmlhttp && typeof XMLHttpRequest != 'undefined')
	{
		xmlhttp = new XMLHttpRequest();
	}
	
	// ENVIA A SOLICITAÇÃO PARA A PÁGINA LISTAGEM.ASP QUE GERA O XML
	xmlhttp.open('GET','listagem.asp',true);
	
	//EXECUTA O BLOCO DA FUNÇÃO PARA A CRIAÇÃO DA TABELA
	xmlhttp.onreadystatechange = function(){
	}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 - SIM.

2 - SIM. Você pode gravar a pagina em CACHE ou pode guardar as informações recebidas através de JAVASCRIPT criando uma variavel(em javascript, claro se a página for em AJAX) que armazene as informações da loja.

3 - XSLT não funciona assim, para entender melhor o seu uso veja essa página:

http://forum.imasters.com.br/index.php?showtopic=293324

 

Sua duvida ao que me parece NÂO TEM haver com XML ou HTML e sim com AJAX e JAVASCRIPT.

quanto ao XSLT é a unica exeção.

Então irei mover o tópico para a area certa.

 

movido de:

Webstandards: CSS / XML / XHTML / HTML http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Javascript / DHTML » Ajax

 

Recomendo que grave as informações em uma variavel ao inves de usar CACHE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.