Ir para conteúdo

POWERED BY:

Arquivado

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

rob.coutinho

ASP com Ajax

Recommended Posts

Galera, estou fazendo um sisteminha de login em Ajax no ASP, mas não estou conseguindo. Estou usando basicamente um sisteminha que já usei muitas vezes no PHP, e em todas funcionaram, mas no ASP não funciona. Até consigo chamar a função que faz todo o processo, ela substituui a DIV que indico pelo icone de carregando, mas não consigo fazer após isso mostrar o que a outra página ASP deveria mostrar. O código é mais ou menos esse:

function goAjax(url, metodo, modo, tagRetorno, parametros) {
	[color="#FF0000"]document.getElementById("divloginHome").innerHTML='<img src="../images/carregando.gif">'[/color]
	if(metodo == "GET") {
		xmlhttp.open("GET", "pagina.asp?usuario=teste&senha=teste");
	} else {		
		xmlhttp.open("POST", "pagina.asp?usuario=teste&senha=teste");
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");
		xmlhttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
		xmlhttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
		xmlhttp.setRequestHeader("Pragma", "no-cache");
	}	
	xmlhttp.onreadystatechange = function() {
		if(xmlhttp.readyState == 4) {
			retorno=xmlhttp.responseText
			document.getElementById("divloginHome").innerHTML=retorno
			findScript(retorno)
		}
	}
	if(metodo == "GET") {
		xmlhttp.send(null);
	} else {		
		xmlhttp.send(parametros);
	}
}

Até onde tá destacado em vermelho ele faz, depois, necas. Abaixo a página ASP que deveria aparecer no lugar da DIV.

 

<!-- #include file="abre_conexao.asp" -->
<%
usuario = Request("usuario")
senha = Request("senha")

strLogin = "select * from tabela where usuario = '" & usuario & "' and senha = '" & senha & "'"
Set execLogin = objConn.Execute(strLogin)

if execLogin.eof then
	Response.Write("<table width=""100%"" border=""0"" cellspacing=""3"" cellpadding=""0"">")
	Response.Write("<form id=""loginHome"" name=""loginHome"" method=""post"" action="""">")
	Response.Write("<tr>")
	Response.Write("<td align=""center"" class=""txt1"">Login</td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><input name=""usuario"" type=""text"" class=""campo1"" id=""usuario"" size=""20"" maxlength=""15"" /></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><span class=""txt1"">Senha</span></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><input name=""senha"" type=""password"" class=""campo1"" id=""senha"" size=""20"" maxlength=""15"" /></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><input name=""SubmitLoginHome"" type=""button"" class=""botao1"" id=""SubmitLoginHome"" value=""Entrar"" onClick=""java script:Form_ValidaLogin();"" /></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><a href=""#"" class=""txt7"" onclick=""MM_openBrWindow(""popup_lembrete_senha.asp?tipo=loja"",""lembreteSenha"",""width=450,height=159"")"">Lembrar Senha</a></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td height=""25"" align=""center"" bgcolor=""#FF0000"" class=""txt1"">Dados Incorretos!</td>")
	Response.Write("</tr>")
	Response.Write("</form>")
	Response.Write("</table>")
else
	Session("lojaLogada") = "1"
	Session("id_loja") = execLogin("id_loja")
	Response.Write("<table width=""100%"" border=""0"" cellspacing=""3"" cellpadding=""0"">")
	Response.Write("<tr>")
	Response.Write("<td bgcolor=""#003366""><a href=""lpainel.asp"" class=""menu_esq_dir"">PAINEL DE CONTROLE</a></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td bgcolor=""#003366""><a href=""cadastro.asp"" class=""menu_esq_dir"">DADOS CADASTRAIS</a></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td bgcolor=""#003366""><a href=""ferramentas.asp"" class=""menu_esq_dir"">FERRAMENTAS</a></td>")
	Response.Write("</tr>")
	Response.Write("</table>")
end if
%>

Agora como faço pra colocar isso no lugar da DIV? Isso no PHP funciona que é uma beleza, pq no ASP não? Não sei o que tá acontecendo. Será algum problema no servidor de hospedagem?

 

Fico no aguardo de toda e qualquer ajuda, urgente! http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acesse o arquivo.asp através da URL e informando os parâmetros necessários, e veja se não está dando algum erro na página. Se estiver OK, aí sim deve ser analisado o código Javascript.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa postar em , conseguimos enxergar perfeitamente suas dúvidas, agora sobre compatibilidade, é como o hargon citou, faça esse teste, pois independente de linguagens o acrônimo com javascript tem que funcionar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos, pensei nisso, e fiz esse teste e o arquivo asp em questão, está restornando norlmente as tabelas em qualquer circunstância. REalmente não consigo entender porque esas tabela não entra no lugar da div que informo para o javascript.

 

Até entendo que por ser javascript o Ajax tem que funcionar tanto no asp quanto no php mas, não sei se há alguma explicação técnica mas o fato é que rodo ajax com muito mais facilidade no php. Não faço idé3ia do problema que possa estar ocorrendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acima de retorno = xmlhttp.responseText, coloque alert(xmlhttp.responseText);

 

Faça o teste e poste o resultado. Se possível, poste uma URL também para podermos acessar a página que possui erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Argon, fiz o que você pediu, até um pouco a mais. rsrs O código ficou assim:

 

function goAjax(url, metodo, modo, tagRetorno, parametros) {
	document.getElementById("divloginHome").innerHTML="<img src='loading.gif'>"
	if(metodo == "GET") {
		alert("Get");
		xmlhttp.open("GET", "loginHomeAjax.asp?usuario=teste&senha=teste");
	} else { 
		alert("Post");
		xmlhttp.open("POST", "loginHomeAjax.asp?usuario=teste&senha=teste");
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");
		xmlhttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
		xmlhttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
		xmlhttp.setRequestHeader("Pragma", "no-cache");
	}	
	xmlhttp.onreadystatechange = function() {
		if(xmlhttp.readyState == 4) {
			alert(xmlhttp.responseText);
			retorno=xmlhttp.responseText
			document.getElementById("divloginHome").innerHTML=retorno
			findScript(retorno)
		}
	}
	if(metodo == "GET") {
		xmlhttp.send(null);
	} else {		
		xmlhttp.send(parametros);
	}
}

Então, o primeiro alert, o do Get ele lê. Ou seja, ele nem chega no alertu que você sugeriu. Fiz isso pra ver se ele tava chamando a função de acordo. Mas a partir disso ele não faz mais nada. O icone de carregando fica na página, e não sai mais de lá. Jà tentei um monte de coisa e até agora nada. O que será isso?

 

Ah amigo, só lembrando, já tentei tanto post como get e nada viu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem certeza ABSOLUTA que seu código funciona em PHP?

 

Eu testei aqui, e não funciona, exceto após declarar o XMLHTTP... aí até o código ASP funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, mudei o javascript pra esse e tá quase dando certo:

 

function openAjax() {
var Ajax;
try {Ajax = new XMLHttpRequest(); // XMLHttpRequest para browsers mais populares, como: Firefox, Safari, dentre outros.
}catch(ee) {
try {Ajax = new ActiveXObject("Msxml2.XMLHTTP"); // Para o IE da MS
}catch(e) {
try {Ajax = new ActiveXObject("Microsoft.XMLHTTP"); // Para o IE da MS
}catch(e) {Ajax = false;
}
}
}
return Ajax;
}


function carregaAjax(pagina, alvo, param1) {
if(document.getElementById) { // Para os browsers complacentes com o DOM W3C.
var exibeResultado = document.getElementById(alvo); // div que exibirá o resultado.
var Ajax = openAjax(); // Inicia o Ajax.
Ajax.open("GET", pagina+"?"+param1, true); // fazendo a requisição
Ajax.onreadystatechange = function()
{
if(Ajax.readyState == 1) { // Quando estiver carregando, exibe: carregando...
exibeResultado.innerHTML = "<img src='loading.gif'>";
}
if(Ajax.readyState == 4) { // Quando estiver tudo pronto.
if(Ajax.status == 200) {
var resultado = Ajax.responseText; // Coloca o retornado pelo Ajax nessa variável
alert(resultado);
resultado = resultado.replace(/\+/g," "); // Resolve o problema dos acentos (saiba mais aqui: [url="http://www.plugsites.net/leandro/?p=4)"]http://www.plugsites.net/leandro/?p=4)[/url]
resultado = unescape(resultado); // Resolve o problema dos acentos
exibeResultado.innerHTML = resultado;
} else {
exibeResultado.innerHTML = "Erro: .";
}
}
}
Ajax.send(null); // submete
}
}

Só que tem um porém. Por ex, se eu dou um login válido, ele funciona ou seja a página asp retorna o html que quero no lugar da div. Porém se passo um longin propositalmente inválido, ele não funciona. Me parece que o erro agora está na página asp que gera o conteúdo pra div, que é esse código:

 

<!-- #include file="abre_conexao.asp" -->
<%
usuario = Request("usuario")
senha = Request("senha")

strLogin = "select * from lojas where usuario = '" & usuario & "' and senha = '" & senha & "'"
Set execLogin = objConn.Execute(strLogin)

if execLogin.eof then
	Session("lojaLogada") = ""
	Session("id_loja") = "" 
	Response.Write("<table width=""100%"" border=""0"" cellspacing=""3"" cellpadding=""0"">")
	Response.Write("<form id=""loginHome"" name=""loginHome"" method=""post"" action="""">")
	Response.Write("<tr>")
	Response.Write("<td align=""center"" class=""txt1"">Login</td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><input name=""usuario"" type=""text"" class=""campo1"" id=""usuario"" size=""20"" maxlength=""15"" /></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><span class=""txt1"">Senha</span></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><input name=""senha"" type=""password"" class=""campo1"" id=""senha"" size=""20"" maxlength=""15"" /></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><input name=""SubmitLoginHome"" type=""button"" class=""botao1"" id=""SubmitLoginHome"" value=""Entrar"" /></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><a href=""#"" class=""txt7"">Lembrar Senha</a></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td height=""25"" align=""center"" bgcolor=""#FF0000"" class=""txt1"">Dados Incorretos!</td>")
	Response.Write("</tr>")
	Response.Write("</form>")
	Response.Write("</table>")
else
	Session("lojaLogada") = "1"
	Session("id_loja") = execLogin("id_loja")
	Response.Write("<table width=""100%"" border=""0"" cellspacing=""3"" cellpadding=""0"">")
	Response.Write("<tr>")
	Response.Write("<td bgcolor=""#003366""><a href=""lpainel.asp?=" & Session("id_loja") & """ class=""menu_esq_dir"">PAINEL DE CONTROLE</a></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td bgcolor=""#003366""><a href=""cadastro.asp=" & Session("id_loja") & """ class=""menu_esq_dir"">DADOS CADASTRAIS</a></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td bgcolor=""#003366""><a href=""ferramentas.asp=" & Session("id_loja") & """ class=""menu_esq_dir"">FERRAMENTAS</a></td>")
	Response.Write("</tr>")
	Response.Write("</table>")
end if
%>

Isso tá sinistro, não achei que rodar Ajax no Asp seria esse osso todo rsrs

Ou seja, se o login dá certo ele mostra oq tá no else, mas se dá errado ele não mostra oq tá no if, dá pra entender? rsrs

 

Poizé, aqui tb funcionou, só esse porém último que te passei agora. Nâo tem mta lógica mas quando dou um login inválido ele não mostra a primeira tabela do if, mas se eu dou um login certo ele mostra do segundo...

 

Sempre lembrando que via url direta, a página retorna as duas tabelas, tanto quando passo um login inválido quanto quando passo um válido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acessando a URL direta retorna as duas tabelas?

 

É possível postar um link para vermos isso? Pq é uma situação totalmente atípica. Não é possível entrar nas duas condições em linguagem alguma. Ou é 0 ou é 1, os dois nunca será.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que você inverteu o que disse antes... você disse que acessando a URL direto dava erro... Aqui, acessando as URL, exibe tabelas diferente, uma azul e outra vermelha.

 

Só que a vermelha parece que é o código da página de login, correto? Faltou o código do Javascript para a nova tentativa de login. Está exibindo só o HTML.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tirei uma parte do código mesmo. Quando se erra o login, teria que mostrar a tabelinha de login mas só com uma tr a mais, no caso escrito Dados Inválidos. Entendeu? Eu inverti agora o If mas mesmo assim não deu certo não.

 

Nâo sei oq pode tá acontecendo pra uma tabela aparecer, e a outra não, como você disse, não tem sentido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testando aqui com FireFox 3.0.3 e no IE 6 funcionou normal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Salgado, se você testou as urls direta funciona sim. Agora tenho uma novidade. Despois que eu mudei o javascript está funcionando mas ainda está meio confuso. Por ex. Quando entro com o login certo de cara, ele funciona, mostra a tabela correta. Quando entro com um login inválido, ele mostra novamente o form de login com a msg de erro. Em compensação, ele não roda mais o script.

 

Creio que o problema agora é a forma como o código do formulário de erro é gerado na página ASP. Estou quase conseguindo rodar esse bendito form de login. Fala sério, isso em PHP seria mto mais fácil. Pena que no servidor em questão que eu estou trabalhando, não oferecem hospedagem Linux senão, fora de brincadeira, mas já tinha mandado mudar pra PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para rodar o Javascript ou ele já tem que está no código ou você tem que enviá-lo junto com a tabela.

 

 

 

Obs. Se quer mesmo ser ajudado, pare com essas comparações entre as linguagens. Está ficando muito feio para você, uma vez que o problema é do programador. Se você tivesse feito em PHP daria o mesmo erro, pois é um erro de programação seu, assim como os primeiros posts que você fez. Você nem testou o que está fazendo em PHP. Se quiser, faça funcionar em PHP e poste o código aqui que lhe ajudaremos a passar para ASP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Hargon, esse form a principio não tem action msm não. Nem o primeiro form. O lance tá no botão que chama o javascript, que faz a validação dos campos e depois chama o Ajax. Agora, só pra efeito de estudo ou sei lá, curiosidade. Sabe porque o form funcionou? Bom, não sei se tem uma explicação técnica pra isso mas, o fato é que, quando você entrava na página, o form de login era gerado e claro, com sua tag Form. beleza, quando a pessoa dava um login invalido ele mostraria o outro form com o aviso de login errado. E aí que foi o lance. Eu tirei do Ajax a criação dessa tag ou seja, no Asp que gera as tabelas, eu simpelsmente tirei as linhas que criam o form e as deixei fixa na página principal ou seja, eu só substituo a tabela dentro da tag form e não ela toda.

 

Tem alguma explicação pra isso? rsrs Só pra exemplificar, olha só como ficou o primeiro if:

 

if execLogin.eof then
	Session("lojaLogada") = ""
	Session("id_loja") = "" 
	Response.Write("<table width='100%' border='0' cellspacing='3' cellpadding='0'>")
	Response.Write("<tr>")
	Response.Write("<td align='center' class='txt1'>Login</td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align='center'><input name='usuario' type='text' class='campo1' id='usuario' size='20' maxlength='15' /></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align='center'><span class='txt1'>Senha</span></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align='center'><input name='senha' type='password' class='campo1' id='senha' size='20' maxlength='15' /></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align='center'><input name='SubmitLoginHome' type='button' class='botao1' id='SubmitLoginHome' value='Entrar' onClick='java script:Form_ValidaLogin();' /></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align='center'><a href='#' class='txt7' onclick='MM_openBrWindow('popup_lembrete_senha.asp?tipo=loja','lembreteSenha','width=450,height=159')'>Lembrar Senha</a></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td height='25' align='center' bgcolor='#FF0000' class='txt1'>Dados Incorretos!</td>")
	Response.Write("</tr>")
	Response.Write("</table>")
else

Viu? Antes era assim:

 

if execLogin.eof then
	Session("lojaLogada") = ""
	Session("id_loja") = ""
	Response.Write("<table width=""100%"" border=""0"" cellspacing=""3"" cellpadding=""0"">")
	[i][u][b]Response.Write("<form id=""loginHome"" name=""loginHome"" method=""post"" action="""">")[/b][/u][/i]
	Response.Write("<tr>")
	Response.Write("<td align=""center"" class=""txt1"">Login</td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><input name=""usuario"" type=""text"" class=""campo1"" id=""usuario"" size=""20"" maxlength=""15"" /></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><span class=""txt1"">Senha</span></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><input name=""senha"" type=""password"" class=""campo1"" id=""senha"" size=""20"" maxlength=""15"" /></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><input name=""SubmitLoginHome"" type=""button"" class=""botao1"" id=""SubmitLoginHome"" value=""Entrar"" /></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td align=""center""><a href=""#"" class=""txt7"">Lembrar Senha</a></td>")
	Response.Write("</tr>")
	Response.Write("<tr>")
	Response.Write("<td height=""25"" align=""center"" bgcolor=""#FF0000"" class=""txt1"">Dados Incorretos!</td>")
	Response.Write("</tr>")
	[u][i][b]Response.Write("</form>")[/b][/i][/u]
	Response.Write("</table>")
else

Doideira né? rsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oks... isso já ficou confuso demais.

 

Descreva o problema novamente.

 

1) Você tem um código que faz LOGIN via Ajax.

 

2) Esse código retorna mensagem de erro ou de sucesso de acordo com o login.

 

3) Essa mensagem era para ser retornada dentro de uma div, onde está o form e os demais campos do Formulário.

 

4) Seu código atual não tem nada de Ajax, então se era para usar Ajax, onde está o Ajax?

 

5) Análise seu código novamente e o que é para está na página do formulário, e na página que verifica o login.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá Salgado, se você testou as urls direta funciona sim. Agora tenho uma novidade.
Nops testei pelo link da raiz do site.

 

Despois que eu mudei o javascript está funcionando mas ainda está meio confuso. Por ex. Quando entro com o login certo de cara, ele funciona, mostra a tabela correta. Quando entro com um login inválido, ele mostra novamente o form de login com a msg de erro. Em compensação, ele não roda mais o script.

 

Creio que o problema agora é a forma como o código do formulário de erro é gerado na página ASP. Estou quase conseguindo rodar esse bendito form de login. Fala sério, isso em PHP seria mto mais fácil. Pena que no servidor em questão que eu estou trabalhando, não oferecem hospedagem Linux senão, fora de brincadeira, mas já tinha mandado mudar pra PHP.

Na verdade você não está montando no FORM a chamada ao JavaScript. O problema não é a linguagem, esse erro aconteceria tanto em PHP, ASP, Java, Phyton ou qualquer outra linguagem.

 

Outro detalhe, você está mal acostumado com o PHP, proteja seu sistema contra SQLInjection.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Salgado. O sistema nem saiu ainda do papel bem dizer. Tenho só uma página em asp nele e só estou testando. Até entendo a preocupação com a segurança mas de momento, se eu não rodar certas coisas, vou me preocupar com isso em outra plataforma pq realmente, tô achando isso mto complicado.

 

Eu posso até estar acostumado com PHP mas de qualquer forma, já fiz muitas coisas parecidas no PHP e nunca tive metade do problema que estou tendo no ASP. Pior, é que nem .Net no servidor do cliente tem, então não posso nem dar um upgrade no sistema pra melhorá-lo enfim, beco sem saída eu acho.

 

Qual linguagem é pior, qual é melhor, qual se sai melhor nessa ou naquela situação eu não sei, mas por ordem, eu prefiro .Net, PHP e só depois, ASP mas, você bem sabe que tem servidores que agente não tem mta opção de escolha. Quisera eu o cliente transferisse o site pra uma Locaweb da vida que eu já estaria terminando esse site. rsrs

 

Enfim, ainda to com o problema do form, sei que é solucionável mas não sei se vou ter tempo hábil pra ficar decifrando essas coisas. Amanhã, creio que vou intimar o cliente a melhorar a plataforma pq desse jeito, tá osso programar rsrs

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu disse... se PHP e .NET ou o que for é sua "praia", então faça funcionar esse Ajax com essas linguagens e poste aqui funcionando, que passaremos para ASP para você.

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.