Ir para conteúdo

POWERED BY:

Arquivado

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

halfar

problemas com ajax com Internet Explorer

Recommended Posts

Este problema ocorre somente no Internet Explorer, pelo menos na versão 8.0.6001.18702

 

Acesse o link abaixo e tente realizar um cadastro:

 

http://www.publicidadepremiada.com.br/cadastro_usuarios/cadastro_usuarios.php

 

Apos clicar no botao enviar aparece a mensagem "carregando..."

 

E não termina de carregar nunca...e o registro não é gravado...

 

Interessante, que a tecnologia IE e AJAX pertencem a mesma empresa, não entanto não funciona. Já no FF não dá problema...

 

que diabos poderia estar ocorrendo...???

 

Tem alguma ferramente do IE para verificar o problema??

 

Estou postando o form e o codigo javascript

 

<form action="xcadastro_usuarios.php" method="post" onsubmit="setarCampos(this); enviarForm('xcadastro_usuarios.php', campos, 'divResultado'); return false;">

<p> </p>

<div id="Layer1" class=texto style="position:absolute; width:1051px; height:281px; z-index:1; left: 98px; top: 79px">

<div id="usuario" style="position:absolute; width:85px; height:19px; z-index:1; left: 163px; top: 25px"><b>usuario</b></div>

<div id="xusuario" style="position:absolute; width:473px; height:19px; z-index:1; left: 163px; top: 50px">

<div align="left">

<input type="text" name="textUsuario" id="textUsuario" value="<? echo $usuario;?>" size="33" maxlength="10">

(max.10 caracteres)</div>

</div>

<div id="email" style="position:absolute; width:62px; height:19px; z-index:1; left: 160px; top: 105px"><b>email</b></div>

<div id="xemail" style="position:absolute; width:289px; height:19px; z-index:2; left: 160px; top: 128px">

<input type="text" name="textEmail" id="textEmail" size="50" value="<? echo $email;?>">

</div>

<div id="senha1" style="position:absolute; width:68px; height:16px; z-index:2; left: 161px; top: 182px"><b>senha</b></div>

<div id="xsenha1" style="position:absolute; width:374px; height:23px; z-index:4; left: 237px; top: 176px">

<input type="password" name="textSenha1" id="textSenha1" maxlength="10">

(max.10 caracteres) </div>

<div id="senha2" style="position:absolute; width:196px; height:16px; z-index:2; left: 621px; top: 187px"><b>redigite

a senha</b></div>

<div id="xsenha2" style="position:absolute; width:136px; height:23px; z-index:4; left: 828px; top: 178px">

<input type="password" name="textSenha2" id="textSenha2" maxlength="10">

</div>

<div id="Layer2" style="position:absolute; width:923px; height:56px; z-index:5; left: 64px; top: 216px">

<input type="checkbox" name="checkEmail" id="checkEmail" checked>

ciente que ao me cadastrar concordo com o Regulamento do Programa<br>

<input type="submit" name="Submit" value="Enviar">

</div>

</div>

 

<div id="divResultado" style="position:absolute; width:470px; height:64px; z-index:2; left: 373px; top: 379px"></div>

</form>

<script>

 

//Cria a função com os campos para envio via parâmetro

 

function setarCampos() {

if(document.getElementById('checkEmail').checked == false){

alert("voce deve concordar com o Regulamento do Programa");

return false;

}else{

 

 

campos = "textUsuario="+encodeURI(document.getElementById('textUsuario').value)+

"&textEmail="+encodeURI(document.getElementById('textEmail').value)+

"&textSenha1="+encodeURI(document.getElementById('textSenha1').value)+

"&textSenha2="+encodeURI(document.getElementById('textSenha2').value);

}

}

 

 

ninguem sabe a resposta disto???

 

 

 

poderia alguem testar no seu navegador IE e me falar se deu problema?? e poderia iformar tambem a versao do seu navegador??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente o seu problema está nessa função aqui:

function objetoXML() {
	if (navegador.indexOf('msie') != -1) { //Internet Explorer

		var controle = (navegador.indexOf('msie 5') != -1) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP'; //Operador ternário que adiciona o objeto padrão do seu navegador (caso for o IE) à variável 'controle'

		try {
			xmlhttp = new ActiveXObject(controle); //Inicia o objeto no IE
		} catch (e) { }
	} else { //Firefox, Safari, Mozilla
		xmlhttp = new XMLHttpRequest(); //Inicia o objeto no Firefox, Safari, Mozilla
	}
}
troque por:
function getHTTPObject(){
        if(window.XMLHttpRequest){
                return new XMLHttpRequest();
        }else if(window.ActiveXObject){
                var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
                for(var i = 0; i < prefixes.length; i++){
                        try     {
                                return new ActiveXObject(prefixes[i] + ".XMLHTTP");
                        } catch (e) {}
                }
        }
}
var xmlhttp = getHTTPObject();

para debugar no ie, aperte F12

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao deu certo, embora não fique travado, e grave o registro, no entanto apos clicar no botao enviar abre uma outra pagina, ao inves de trazer o resultado na mesma pagina, pois estou usando ajax...

 

neste caso, usando sua funcao, o problema é o mesmo tanto no IE quanto no FF



fiz um debug no script.js no IE - apareceu uma mensagem de erro dizendo Object expected script.js, line 31 character 2

 

na linha mencionada, a bem da verdade nao exciste nada...mas na linha seguinte consta

function enviarForm(url, campos, destino) {

será que o erro nao seria aqui??

var elemento = document.getElementById(destino);

 

pois o getElementById não e mais voltado para o FF?

 

NO IE não deveria ser algo do tipo getElementByName??

Compartilhar este post


Link para o post
Compartilhar em outros sites

não cara, vc tá viajando.. nada a ver essa parada ai de getById e byName.. os 2 entendem a mesma coisa.

 

o seu único problema, é isso aqui:

function enviarForm(url, campos, destino) {

//..seu codigo aqui


   return false; //apenas adicione essa linha aqui no final
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloquei o return false, mas tambem nao funcionou...

 

fiz uma varredura na internet sobre este assunto, e a grande maioria apresenta problemas com o IE. Encontrei um site que traz um script utilizando ajax em varios navegadores e este sim, realmente funciona. So que o script dele tem uma outra estrutura, ele trabalha executando o ajax com um link, no meu caso é botao submit de formulario. O script dele com link funciona. Mas eu tenho um script com link tambem (esta na pagina inicial do meu site www.publicidadepremiada.com.br), o meu script tambem na pagina inicial tambem funciona.

 

O problema está quando é enviado os dados via formulario.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aqui tua função:

function enviarForm(url, campos, destino) {

 

//Atribui à variável 'elemento' o elemento que irá receber a página postada

var elemento = document.getElementById(destino);

 

//Executa a função objetoXML()

objetoXML();

 

//Se o objeto de 'xmlhttp' não estiver true

if (!xmlhttp) {

 

//Insere no 'elemento' o texto atribuído

elemento.innerHTML = 'Impossível iniciar o objeto XMLHttpRequest.';

 

return;

 

} else {

 

//Insere no 'elemento' o texto atribuído

elemento.innerHTML = 'Carregando...';

 

}

 

xmlhttp.onreadystatechange = function () {

 

//Se a requisição estiver completada

if (xmlhttp.readyState == 4 || xmlhttp.readyState == 0) {

 

//Se o status da requisição estiver OK

if (xmlhttp.status == 200) {

 

//Insere no 'elemento' a página postada

elemento.innerHTML = xmlhttp.responseText;

 

} else {

 

//Insere no 'elemento' o texto atribuído

elemento.innerHMTL = 'Página não encontrada!';

 

}

 

}

 

}

 

//Abre a página que receberá os campos do formulário

xmlhttp.open('POST', url+'?'+campos, true);

 

//Envia o formulário com dados da variável 'campos' (passado por parâmetro)

xmlhttp.send(campos);

 

return false;//adicione isso

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

valew pelo teu empenho bruno, mas conforme havia dito, ja testei isto...nao resolve...

 

vou ter que pesquisar mais na internet, mas pelo o que ja percebi nas minhas pesquisas, é que o IE é realmente meio problematico, cheguei a ler um post de alguem dizendo que o ajax funciona bem com mysql, mas com sqlserver ha problemas...(só não sei o que alhos tem a ver com bugalhos)

 

bem, vou pesquisar mais, mas caso nao encontre, terei que fazer um programa especial para o IE, sem ajax...

Compartilhar este post


Link para o post
Compartilhar em outros sites

cheguei a ler um post de alguem dizendo que o ajax funciona bem com mysql, mas com sqlserver ha problemas...(só não sei o que alhos tem a ver com bugalhos)

não cara.. nada a ver isso.

 

Vi lá também que vc não está usando a função

function getHTTPObject(){
q eu sugeri. Implemente oq eu pedi, e deixe no ar para q eu consiga ao menos debugar, e te dizer qual o próximo passo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi...

 

coloquei a funcao que voce pediu, a getHTTPObject(){... mas nao mudou nada...

 

essa funca sua verifica navegador... correto?

 

e a funcao objetoXML( que já está lá... não faz a mesma coisa?? tenho que manter assim mesmo as duas funcções??

 

 

Voce disse para deixar o site no ar...alguma vez voce acessou e estava fora do ar???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qndo eu acessei, não estava com o código atualizado.

 

 

troque isso aqui:

	//Executa a função objetoXML()
	objetoXML(); 
por:

var xmlhttp = getHTTPObject();
e ai pode excluir a função objetoXML

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz o que foi sugerido, retirei a funcao objetoXML(); , apareceu a mensagem Impossível iniciar o objeto XMLHttpRequest.

 

Então retirei tambem o codigo que gera essa mensagem de erro: a seguir:

 

//Se o objeto de 'xmlhttp' não estiver true

 

if (!xmlhttp) {

Insere no 'elemento' o texto atribuído
/elemento.innerHTML = 'Impossível iniciar o objeto XMLHttpRequest.';

return;

} else {

Insere no 'elemento' o texto atribuído
elemento.innerHTML = 'Carregando...';

}

 

executei o script, so que ao inves de retornar as mensagens na div da propria pagina, abre uma nova pagina.

 

E agora isto ocorre tanto no IE quanto no FF

Compartilhar este post


Link para o post
Compartilhar em outros sites

vc retirou a declaração da função, coloque ela de volta:

function getHTTPObject(){
        if(window.XMLHttpRequest){
                return new XMLHttpRequest();
        }else if(window.ActiveXObject){
                var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
                for(var i = 0; i < prefixes.length; i++){
                        try     {
                                return new ActiveXObject(prefixes[i] + ".XMLHTTP");
                        } catch (e) {}
                }
        }
}
veja como debugar seu js:

http://wbruno.com.br/2011/03/31/como-debugar-javascript-firefox-erros-comuns/

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao tem jeito...vou fazer outro codigo sem ajax para o IE...

 

fiz todas as recomendacoes...abaixo segue o codigo completo js

 

note que embora exista a funcao objetoXML(),mas a chamada à funcao está marcada como comentario

 

 

var navegador = navigator.userAgent.toLowerCase(); //Cria e atribui à variável global 'navegador' (em caracteres minúsculos) o nome e a versão do navegador

//Cria uma variável global chamada 'xmlhttp'


function getHTTPObject(){
if(window.XMLHttpRequest){
return new XMLHttpRequest();
}else if(window.ActiveXObject){
var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
for(var i = 0; i < prefixes.length; i++){
try {
return new ActiveXObject(prefixes + ".XMLHTTP");
} catch (e) {}
}
}
}

var xmlhttp = getHTTPObject();

//Função que inicia o objeto XMLHttpRequest

function objetoXML() {

if (navegador.indexOf('msie') != -1) { //Internet Explorer

var controle = (navegador.indexOf('msie 5') != -1) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP'; //Operador ternário que adiciona o objeto padrão do seu navegador (caso for o IE) à variável 'controle'

try {

xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); //Inicia o objeto no IE

} catch (e) { }

} else { //Firefox, Safari, Mozilla

xmlhttp = new XMLHttpRequest(); //Inicia o objeto no Firefox, Safari, Mozilla

}

}

//Função que envia o formulário

function enviarForm(url, campos, destino) {

//Atribui à variável 'elemento' o elemento que irá receber a página postada
var elemento = document.getElementById(destino);

//Executa a função objetoXML()
//objetoXML();

//Se o objeto de 'xmlhttp' não estiver true
if (!xmlhttp) {

//Insere no 'elemento' o texto atribuído
elemento.innerHTML = 'Impossível iniciar o objeto XMLHttpRequest.';

return;

} else {

//Insere no 'elemento' o texto atribuído
elemento.innerHTML = 'Carregando...';

}

xmlhttp.onreadystatechange = function () {

//Se a requisição estiver completada
if (xmlhttp.readyState == 4 || xmlhttp.readyState == 0) {

//Se o status da requisição estiver OK
if (xmlhttp.status == 200) {

//Insere no 'elemento' a página postada
elemento.innerHTML = xmlhttp.responseText;

} else {

//Insere no 'elemento' o texto atribuído
elemento.innerHMTL = 'Página não encontrada!';

}

}

}

//Abre a página que receberá os campos do formulário
xmlhttp.open('POST', url+'?'+campos, true);

//Envia o formulário com dados da variável 'campos' (passado por parâmetro)
xmlhttp.send(campos);
return false;//adicione isso

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, e oq acontece agora ?

 

qual o problema? qual o erro ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, vamos lá.

Esse trecho aqui:

	xmlhttp.onreadystatechange = function () {

		//Se a requisição estiver completada
		if (xmlhttp.readyState == 4 || xmlhttp.readyState == 0) { 

			//Se o status da requisição estiver OK
			if (xmlhttp.status == 200) {

				//Insere no 'elemento' a página postada
				elemento.innerHTML = xmlhttp.responseText; 

			} else { 

				//Insere no 'elemento' o texto atribuído
				elemento.innerHMTL = 'Página não encontrada!'; 

			}

		}

	}
troque por:

	xmlhttp.onreadystatechange = function () {
		//Se o status da requisição estiver OK
		if (xmlhttp.status == 4) {
			//Insere no 'elemento' a página postada
			elemento.innerHTML = xmlhttp.responseText; 
		}
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

tambem nao deu certo, agora ate mesmo o FF deixou de funcionar...

No FF, embora nao funcione, la no console de erros, nao acusa erro algum

 

Ja no IE, quando a gente clica naquele icone amarelo no rodape da pagina (quando ha um erro na pagina), informa que ´há erro na linha 70, ou seja, esta linha:

if (xmlhttp.status == 4) {

 

e tambem ha erro na linha abaixo

elemento.innerHTML = xmlhttp.responseText;

 

referente a este erro, o debugger do IE informa que os dados necessários para concluir esta operacao ainda não estão disponiveis

 

Na realidade, este segundo erro somente apareceu, porque como ocorreu erro na linha anterior, eu deixei ela como comentario para vr o que ocorreria

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste o erro exatamente como ele aparece para ti. Sem traduzir, por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o erro que aparece para mim é o mesmo de sempre...

 

fica travado aparecendo "carregando..."

 

o debuger do IE é que aponta a mensagem citada acima

 

acesse o link e veja http://www.publicidadepremiada.com.br/cadastro_usuarios/cadastro_usuarios.php



apareceu uma luz aqui no fim do tunel...

 

testei este script em outro provedor... e la funcionou tudo certinho, inclusive no IE...

 

apenas apareceram umas mensagens de erro que se referem a conexao com banco de dados, mas isto é normal, pois obviamente nao tenho o banco de dados neste provedor...

 

para ver acesse o link http://www.negocios.online.nom.br/teste/cadastro_usuarios.php

 

os erros apareceram corretamente dentro da div, inclusive as mensagens quando usuario deixa de preenhcer algum campo.

 

agora é verificar com o provedor, e duvido que tenham a resposta... acho que é um provedor nao muito bem configurado, pelo precinho barato que pago...

 

Só fico pensando o que tem a ver o provedor com configuracoes de JS , Como não entendo bolufas de provedor...

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.