Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com rotina Ajax+ASP IE versus FireFox


jgd

Pergunta

:wacko:

Olá Pessoal,

Estou com seguinte problema envolvendo JavaScript,Ajax,ASP e Navegadores I.E e FF.

Seguinte tenho

<form name="form" action="admin_rotina1.asp" method="post" onSubmit='return form_simples(this)'>

<select name="grupo" Onchange="atualizaCliente(this.value);" alt="yes">
<option value="0">--</option>
<option value="SO">Sócios</option>
<option value="FR">Freqüentadores</option>
<option value="FA">Familiar</option>
<option value="PR">Prestadores</option>
<option value="FO">Fornecedores</option>
</select>


<div id="lanc" > 
<select name="idCad" alt="yes">
<option value="0">--</option>
</select>
</div>



<div id="lancG"> 

<select name="idSubGrupoContabil" Onchange="atualizaSuCta(this.value);"  alt="yes">
<option value="0">--</option>
</select>

</div>


<div id="lancSC"> 

<select name="idSubCtaContabil" alt="yes">
<option value="0">--</option>
</select>

</div>


</form>
Depois mando a opção selecionada pelo usuário (atualizaCliente) para JavaScript + Ajax
<script>

//////Rotina AJAX AtualizaCliente//////

var requip;
function loadXMLDoc(url){
	requip = null;
	if (window.XMLHttpRequest) {
		requip= new XMLHttpRequest();
		requip.onreadystatechange = ProcessEquip; // o req.  foi alterado para requip
		requip.open("POST", url, true); // o req.  foi alterado para requip
		requip.send(null); // o req.  foi alterado para requip

	} else if (window.ActiveXObject) {
		try {
			requip= new ActiveXObject("Msxml2.XMLHTTP.4.0");
		} catch(e) {
			try {
				requip= new ActiveXObject("Msxml2.XMLHTTP.3.0");
			} catch(e) {
				try {
					requip= new ActiveXObject("Msxml2.XMLHTTP");
				} catch(e) {
					try {
						requip= new ActiveXObject("Microsoft.XMLHTTP");
					} catch(e) {
						requip= false;
					}
				}
			}
		}
		if (requip) {

		//alert("vai ")
			requip.onreadystatechange = ProcessEquip;
			requip.open("POST", url, true);
			requip.send();
		}
	}
}

///receber o select que o ASP gerou e manda para a div elemento. 

function ProcessEquip(){
	if (requip.readyState == 4) {
		if (requip.status == 200) {

			document.getElementById("lanc").innerHTML = requip.responseText;
		} else {
		///alert(""+requip.responseText)
		alert("Houve um problema ao obter os dados:\n" + requip.statusText);
		}
	}
}


// Manda valor do HTML Campo para o ASP Ajax

function atualizaCliente(valor){
    //alert("aqui "+valor)  
	loadXMLDoc("atualizaCliente.asp?grupo="+valor);
}
/////////////////////////////////////////////////////////////////////////////
Rotina ASP Pega o paramentro que o Ajax mandou e alimenta o select
<%Response.Charset="ISO-8859-1" 'acentuação
%>
<!--#include file="config_var.asp" -->
<%

Set cnn = Server.CreateObject("adodb.Connection")
if strOn_Off = "off" then 
cnn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=C:\Inetpub\wwwroot\ASP\Dados\bdados.mdb; Uid=XXX; Pwd=zzz;" 
else
cnn.Open "driver={Microsoft Access Driver (*.mdb)};DBQ=D:\web\PastaDominio\Dados\bdados.mdb; Uid=xxx; Pwd=zzz;" 

end if 

Set rs = Server.CreateObject("ADODB.Recordset")
sql = " Select * from tbCad2 where tipoCad = '" & Request("grupo") & "' order by nome"

rs.Open sql,cnn,3
%>
<select name="idCad" alt="yes">
    <option value="0">--</option>
    <% while not rs.eof %>
            <option value="<%=rs("idCad")%>"><%=rs("nome")%></option>
    <%        rs.MoveNext
    Wend%>
</select>
    
<%
rs.Close
Set rs = Nothing
%>
OK! Funciona no IE e FF Então neste mesmo form tenho mais os elementos :
<input type="radio" name="tipoLanc" alt="yes" id="1" value="1" OnClick="atualizaGrupo(this.value);">Crédito 
<input type="radio" name="tipoLanc" alt="yes" id="2" value="2" OnClick="atualizaGrupo(this.value);">Débito
Depois a rotina correspondente javascript + ajax : atualizaGrupo
<script>
var requip2;
function loadXMLDoc2(url){
    requip2 = null;
    if (window.XMLHttpRequest) {
        requip2= new XMLHttpRequest();
        requip2.onreadystatechange = ProcessEquip2; // o req.  foi alterado para requip
        requip2.open("POST", url, true); // o req.  foi alterado para requip
        requip2.send(null); // o req.  foi alterado para requip

    } else if (window.ActiveXObject) {
        try {
            requip2= new ActiveXObject("Msxml2.XMLHTTP.4.0");
        } catch(e) {
            try {
                requip2= new ActiveXObject("Msxml2.XMLHTTP.3.0");
            } catch(e) {
                try {
                    requip2= new ActiveXObject("Msxml2.XMLHTTP");
                } catch(e) {
                    try {
                        requip2= new ActiveXObject("Microsoft.XMLHTTP");
                    } catch(e) {
                        requip2= false;
                    }
                }
            }
        }
        if (requip2) {
        
        //alert("vai ")
            requip2.onreadystatechange = ProcessEquip2;
            requip2.open("POST", url, true);
            requip2.send();
        }
    }
}


function ProcessEquip2(){


    if (requip2.readyState == 4) {
        if (requip2.status == 200) {
            document.getElementById("lancG").innerHTML = requip2.responseText;
             } else {
        //alert("zz  "+requip2.responseText)
        alert("Houve um problema ao obter os dados:\n" + requip2.statusText);
        }
    }
}





function atualizaGrupo(valor){

var tipoNav =navigator.appName;
if (tipoNav!="Microsoft Internet Explorer") {
alert("Este navegado não dá suporte aos\nrecursos automaticos disponíveis nesta tela.\nRecomendamos a utilização do Internet Explorer.");
document.form.getElementById("btGrava").desabled=true;
}
//alert("aqui "+valor)
document.getElementById("lancG").innerHTML = "<div id='lancG'><select name='idSubGrupoContabil' Onchange='atualizaSuCta(this.value);'  alt='yes'><option value='0'>--</option></select></div>"
document.getElementById("lancSC").innerHTML = "<div id='lancSC'><select name='idSubCtaContabil' alt='yes'><option value='0'>--</option></select><input type='hidden' name='subconta' value='0' alt='yes'></div>"
if(valor=="1"){
document.getElementById("boleto").innerHTML = "<div id='boleto'>Gerar Boleto:&nbsp;</td><td><input type='radio' name='boleto' alt='yes' id='1' value='S'>Sim&nbsp;<input type='radio' name='boleto' alt='yes' id='2' value='N'>Não&nbsp;</div>"
}else{
document.getElementById("boleto").innerHTML = "<div id='boleto'></div>"
}

    loadXMLDoc2("atualizaSubGrupo.asp?tipoLanc="+valor);
}

</script>
A rotinas ASP correspondente : atualizaGrupo
<%Response.Charset="ISO-8859-1" 'acentuação
%>
<!--#include file="config_var.asp" -->
<%
Set cnn = Server.CreateObject("adodb.Connection")
if strOn_Off = "off" then 
cnn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=C:\Inetpub\wwwroot\ASP\Dados\bdados.mdb; Uid=XXX; Pwd=zzz;" 
else
cnn.Open "driver={Microsoft Access Driver (*.mdb)};DBQ=D:\web\PastaDominio\Dados\bdados.mdb; Uid=xxx; Pwd=zzz;" 
end if 

Set rs = Server.CreateObject("ADODB.Recordset")
sql = " Select * from tbSubGrupo where idG = " & Request("tipoLanc") & " order by subgrupo"

rs.Open sql,cnn,3
%>
<select name="idSubGrupoContabil" Onchange="atualizaSuCta(this.value);" alt="yes">

    <option value="0">--</option>
    <% while not rs.eof %>
            <option value="<%=rs("idSg")%>"><%=rs("subgrupo")%></option>
    <%        rs.MoveNext
    Wend%>
</select>
    
<%
rs.Close
Set rs = Nothing
%>

Mas esta ultima rotina só funciona no I.E.... No FF não !!!

Aí revisei o codigo... não achei nada - a principio, que provocasse erro.

Pesquise na net.. e descobri que "supostamente" o innerHTML é nativo do I.E (W3C) e para o Fire Fox (Mozilla) o

comando correspondente seria o textContent...

Ok! Fiz a função para testar o navegado e.... descobri que até funciona. Porem não gera tags html...

porque textContent equivale ao innerText só gerando string texto.

Mas o interessante de tudo é a primeira rotina (lá de cima) funiona no FF e utiliza innerHTML.

Aí complicou? Funciona uma e não funciona a outro... sendo que são quase iguais.

alguém poderia me ajuda??

Abraço

JGD

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

funciona no FF innerHTML sim. Olha seu codigo ta muito grande, e fica dificil analisar, não é só copy e paste.

O que eu te indico é usar um depurado no FF, eu uso o firebug (plugin)

voce sabe exatamente qual o ponto do seu codigo que começa a não funcionar no FF?

Link para o comentário
Compartilhar em outros sites

  • 0

Ok Andreia,

1ª Ogrigado por comentar...

Olha só: Ainda estou aprendendo este lance de JavaScript + Ajax.. Então não denho domínio da técnica.

Vou tentar resumir a lógica.

Na parte Html tenho o form e as div que deverão ser alterada pelo ajax.

Depois tenho a rotina do javascript passa para o Ajax...

Que manda para a rotina Asp....

Que por sua vez gera o conteudo que alimenta o Select....

Que então retorna o conteudo pelo Ajax...

Que passando para a div.

É isso!

Desculpa, mais como disse estou aprendendo... Se esta errado(logica, etc.) por favor alguém me oriente.

Eu realmente não sei o que está errado.. Contudo, praticamente as duas rotinas (javaScript + Ajax ) são igual em sua estrutura mas uma funciona outra não.

Porém, fico mais animado em saber que você afirma que o innerHTML funciona no FF.

JGD

Link para o comentário
Compartilhar em outros sites

  • 0

então vi que você tem uma pá de combos, e um ta chamando o outro. Outra coisa, você está replicando o mesmo codigo do Ajax pro outro combo... O ideal seria usar a mesma rotina.

Eu montei um exemplo simples, veja se te ajuda: http://scriptbrasil.com.br/forum/index.php?showtopic=121008

Link para o comentário
Compartilhar em outros sites

  • 0
então vi que você tem uma pá de combos, e um ta chamando o outro. Outra coisa, você está replicando o mesmo codigo do Ajax pro outro combo... O ideal seria usar a mesma rotina.

Eu montei um exemplo simples, veja se te ajuda: http://scriptbrasil.com.br/forum/index.php?showtopic=121008

Andreia,

Olha só: Agora tá funcionando certinho...

Eu baixei o FireBug... pelo que vi é chei de recursos... eu ainda não sei usar.. vou procurar informações de como utilizar a ferramenta.

O engraçado é que depois da instalação... não sei ao certo. A rotina começou a funcionar.

Valeu!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...