Jump to content


irto2005

Member Since 04/03/2008
Offline Last Active 15/12/2009, 16:13
-----

Topics I've Started

Problema Com Ajax E Os Browers

08/12/2009, 15:09

Olá, preferi postar em um outro tópico uma duvida que difere um ouco sobre o assunto no outro.


Pois bem, eu tenho um código em Javascript, mando ele adicionar um conteudo num elemento via innerHTML, o Brower faz isso, só que no mesmo momento parece que ele recerrega a pagina, ou simplismente desfaz.
function verificar() {
    log.info($('login').value.empty());
    log.info($('senha').value.empty());
    if ($('login').value.empty()) {
	$('erro').innerHTML('Preencha o campo login para que a requisição possa ser feita.');
    } else if ($('senha').value.empty()) {
	$('erro').innerHTML('Preencha o campo senha para que seu login possa ser feito.');
    } else {
	var ajax = new Ajax.Request($F('loca'), {
	    parameters : $('form_login').serialize(true),
	    requestHeaders : {
		Accept : 'application/json'
	    },
	    onLoading : carregando,
	    onFailure : function() {
		$('erro').innerHTML = 'Erro no processamento da requisição.';
	    },
	    onSuccess : processXML
	});
    }
}

function carregando() {
    $('login').setAttribute('disabled', 'disabled');
    $('senha').setAttribute('disabled', 'disabled');
    $('butto').setAttribute('disabled', 'disabled');
    $('butto').value = "Carregando...!";
}

function processXML(transp) {
    $('login').removeAttribute('disabled');
    $('senha').removeAttribute('disabled');
    $('butto').removeAttribute('disabled');
    $('butto').value = "Login!";

    var retorno = transp.responseText.evalJSON(true);
    var msg = $('erro');
    var retur;

    if (!retorno.login) {
	msg.innerHTML = retorno.erro;
    } else {
	window.location = retorno.redirecionar;
	msg.innerHTML = 'Redirecionando...';
    }
}

O que eu faço para isso não acontecer.?? Há algo de errado no codigo...

Problema Desconhecido Com Ajax E Php

08/12/2009, 11:37

Olá,

=]

Eu, com minha embarcação a 100% vim a navegar pelas aguas do WMO em busca de coordenadas para meu tesouro. =]

Pois, detalhes.
Estou com um projeto em PHP. Em certas paginas para conforto do visitante/usuario eu uso códigos JavaScript ultilizando o AJAX.
Fiz o código PHP para gerar um XML, que aparentemente não têm erros, já que nenhuma mensagem de erro é retornada(php_error.log).

Pois bem,
finalidade do programa: fazer o login de um usuario para dentro do painel.
erro:
-----Se eu colocar a senha e o login certo na primeira vez, ele é redirecionado ao painel.
-----Se eu colocar errado a mensagem de erro não é exibida.
-----Se eu colocar errado e colocar certo, a msg naum é exibida e não é feito o login de primeira. Tem que ir denovo.
-----Se eu colocar uns alert no java script funciona tudo certinho.
As vezes acontece coisas mais estranhas....

... ??

Os códigos:
function verificar() {
    try {
	ajax = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
	try {
	    ajax = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (ex) {
	    try {
		ajax = new XMLHttpRequest();
	    } catch (exc) {
		alert("Esse browser não tem recursos para uso do Ajax");
		ajax = null;
	    }
	}
    }

    var form  = document.getElementById('form_login');
    var login = document.getElementById("div_login");
    var logi2 = document.getElementById("login");
    var senha = document.getElementById("senha");
    var carr  = document.getElementById("butto");
    var ant   = carr.value;

    ajax.open("POST", document.getElementById('loca').value, true);
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

    ajax.onreadystatechange = function() {
	if (ajax.readyState == 1) {
	    logi2.setAttribute('disabled', 'disabled');
	    senha.setAttribute('disabled', 'disabled');
	    carr.setAttribute('disabled', 'disabled');
	    carr.value = "Carregando...!";
	}
	if (ajax.readyState == 4) {
	    if (ajax.Status == 200) {
		senha.removeAttribute('disabled');
		logi2.removeAttribute('disabled');
		carr.removeAttribute('disabled');
		carr.value = ant;
		var retur = processXML(ajax.responseXML, login);
		login.innerHTML = retur + login.innerHTML;	       
	    } else if(ajax.status != 0) {
		login.innerHTML = "Ocorreu um erro e seu pedido não pode ser efetuado.";
	    }
	}
    }

    var params = new Array();
    for ( var i = 0; i < form.elements.length; i++)
	params.push(encodeURIComponent(form.elements[i].name) + "="
		+ encodeURIComponent(form.elements[i].value));

    ajax.send(params.join('&'), login);

}

function processXML(obj, back) {
    var root = obj.getElementsByTagName("root");
    var logtag = root[0].getElementsByTagName("login");
    var retur;    
    
    if (logtag[0].firstChild.nodeValue == 0) {
	retur = root[0].getElementsByTagName('erro')[0].firstChild.nodeValue;
    } else {
	var local = root[0].getElementsByTagName('redirecionar')[0].firstChild.nodeValue;
	window.location = local;
	retur = local;
    }
    alert(retur);
    return retur;
}

Todos os IDs estão corretamente na pagina e o XML é retornado com perfeição.


Vlww ai Nativos.. =]
Até

:assobio:

Eu corrigi umas letras que estavam em maiusculo que não eram para estar e tava ajudando...
Descobri isso depois que eu peguei o Firebug. Ai eu fiz os testes e talz!! E funciono... ENTRETANTO... só quando o Firebug esta ativo, quando OFF continua a dar aqueles problemas.

...
...
...

=]

(No Internet Explorer funciona normalmente... colocarei o codigo online daquiapouco e já coloco o link aqui)

Eu "ajeitei" o código.. E não funciona em mais lugar nenhuma... (Testado no: Opera, IE, Mozilla):

function iniAjax(){
if (window.XMLHttpRequest){
return new XMLHttpRequest();
} else if (window.ActiveXObject) { // suporte ao IE 7
var aVersoes = new Array("MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP");
for ( var i = 0; i < aVersoes.length; i++) {
try {
return new ActiveXObject(aVersoes[i]);
} catch (e) { }
}
}
// se nenhum objeto xmlhttp for suportado
throw new Error("Seu browser nao suporta AJAX");
}

var ajax = iniAjax();

function verificar(){
var form = document.getElementById('form_login');
var login = document.getElementById("div_login");
var logi2 = document.getElementById("login");
var senha = document.getElementById("senha");
var carr = document.getElementById("butto");
var ant = carr.value;

ajax.open("POST", document.getElementById('loca').value, true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=ISO-8859-1");

ajax.onreadystatechange = function() {
if (ajax.readyState == 1) {
logi2.setAttribute('disabled', 'disabled');
senha.setAttribute('disabled', 'disabled');
carr.setAttribute('disabled', 'disabled');
carr.value = "Carregando...!";
}
if (ajax.readyState == 4) {
if (ajax.status == 200) {
senha.removeAttribute('disabled');
logi2.removeAttribute('disabled');
carr.removeAttribute('disabled');
carr.value = ant;
var retur = processXML(ajax.responseXML, login);
login.innerHTML = retur + login.innerHTML;
} else if (ajax.status != 0) {
login.innerHTML = "Ocorreu um erro e seu pedido não pode ser efetuado.";
}
}
}

var params = new Array();
for ( var i = 0; i < form.elements.length; i++)
params.push(encodeURIComponent(form.elements[i].name) + "="
+ encodeURIComponent(form.elements[i].value));

ajax.send(params.join('&'), login);
}

function processXML(obj, back) {
var root = obj.getElementsByTagName("root");
var logtag = root[0].getElementsByTagName("login");
var retur;

if (logtag[0].firstChild.nodeValue == 0) {
retur = root[0].getElementsByTagName('erro')[0].firstChild.nodeValue;
} else {
var local = root[0].getElementsByTagName('redirecionar')[0].firstChild.nodeValue;
window.location = local;
retur = 'Redirecionando...';
}
return retur;
}


Ninguem tem alguma ideia??

Apesar de ninguem saber do meu problema, eu vou acrescentando aqui o historico da minha guerra.

Bem, procurando, procurando e procurando. Achei um coisa bem interessante. Um Framework(Um biblioteca); Esse é uma API de no Prototype. Gostei e adaptei o código... Masssss.....

Ainda ta dando problemas... não creio ser possivel ainda do codigo Javascript... por isso postarei partes do codigo, ja que o código todo é imenso...

Daonde vem o XML:
<?php
/**
 * @author Israel Trindade
 * @version 1.0
 * @license Licensed for Global Animes
 * @desc Este código foi gerado para se rodar em PHP 5.2 ou superior
 */

/* ---Carrega as Bibliotecas--- */
Require_once '../../../../../conf_/geral.php';
Require_once '../../../../../conf_/mysql.php';
Require_once '../../../../../conf_/site.php';
Require_once '../../../../../conf_/run.php';
Require_once '../../../../../conf_/get.php';
Require_once '../../../../../conf_/exe.php';

/* ---Inicia a variavel MySQL para iniciar a instância juntamente a instancia Geral--- */
$mysql = NULL;
$geral = New Geral('../../../../../', @$_GET['POS'], 'globalanimes', $mysql, FALSE);

$XMLDoc  = "<?xml version='1.0' encoding='UTF-8' ?>";
$XMLDoc .= "<root>";

$query = New Consulta("SELECT * FROM `" . $mysql->TabUsers . "` WHERE `login` = '" . $mysql->validar(2, $_POST['login'], $geral) . "' AND `senha` = '" . MD5($_POST['senha']) . "' LIMIT 1", $mysql, $geral);
$has   = @mysql_num_rows($query->resource);

$login = TRUE;
If($has !== FALSE){
	If($has != 0){
		$dados = $query->get_array();
		If (!$dados == TRUE) $login = FALSE;
	}
	Else $login = FALSE;
} Else	$login = FALSE;

If (!$login){	
	$XMLDoc .= "<erro id='erro'>Erro: Não foi possivel efetuar o login, confira se os dados estão corretos.</erro>";	
} ELSE {
	$XMLDoc .= "<redirecionar id='redirecionar'>" . $geral->config->geral->SiteLink . $geral->config->geral->SitePasta . 'admin/' . "</redirecionar>";
	
	$_SESSION['NOME']  = $dados['nome'];
	$_SESSION['LOGIN'] = $dados['login'];
	$_SESSION['SENHA'] = MD5(substr($dados['senha'], 0, 16) . GETENV('REMOTE_ADDR'));
	$_SESSION['HTTP_USER_AGENT'] = MD5($_SERVER['HTTP_USER_AGENT'] . GETENV('REMOTE_ADDR'));
	$_SESSION['TEMA']  = $dados['tema'];
}

If($login === FALSE) $login = 2;
$XMLDoc .= "<login id='login'>" . $login . "</login>";
$XMLDoc .= "</root>";

Header("Content-type: application/xml;"); 
Print $XMLDoc;
?>

E agora o novo Javascript:

function verificar() {
    var ajax = new Ajax.Request($F('loca'), {
	parameters : $('form_login').serialize(true),
	onLoading : carregando,
	onFailure : function() {
	    alert('Erro');
	},
	onSuccess : processXML
    });
}

function carregando() {
    $('login').setAttribute('disabled', 'disabled');
    $('senha').setAttribute('disabled', 'disabled');
    $('butto').setAttribute('disabled', 'disabled');
    $('butto').value = "Carregando...!";
}

function processXML(transp) {
    $('login').removeAttribute('disabled');
    $('senha').removeAttribute('disabled');
    $('butto').removeAttribute('disabled');
    $('butto').value = "Login!";
    
    var obj    = transp.responseXML;
    var root   = obj.getElementsByTagName("root");
    var logtag = obj.getElementsByTagName("login");
    var retur;
    
    
    if (logtag[0].firstChild.nodeValue == 2) {
	erro = $('erro');
	erro.style.display = 'block';
	erro.innerHTML = root.getElementsByTagName('erro')[0].firstChild.nodeValue;
	alert(transp.status + ' ' + obj + ' ' + logtag.firstChild.nodeValue);
    } else {
	var local = root[0].getElementsByTagName('redirecionar')[0].firstChild.nodeValue;
	$('div_login').value = 'Redirecionando...';
	window.location = local;
    }
}


Vlw.. ta ai!!
Mais uma parte da historia de minha aventura nessa selva nada natural...

Até...

Eeee... Agora ta funcionando.. mais ainda com problemas...

Bem é assim... toda vez que ele termina a requisição e imprime um resultado... O Brower recarrega a pagina...

Da para entender ou eu que sou noob?

O novo código:

function verificar() {
    var ajax = new Ajax.Request($F('loca'), {
	parameters : $('form_login').serialize(true),
	requestHeaders : {
	    Accept : 'application/json'
	},
	onLoading : carregando,
	onFailure : function() {
	    $('erro').innerHTML = 'Erro no processamento da requisição.';
	},
	onSuccess : processXML
    });
}

function carregando() {
    $('login').setAttribute('disabled', 'disabled');
    $('senha').setAttribute('disabled', 'disabled');
    $('butto').setAttribute('disabled', 'disabled');
    $('butto').value = "Carregando...!";
}

function processXML(transp) {
    $('login').removeAttribute('disabled');
    $('senha').removeAttribute('disabled');
    $('butto').removeAttribute('disabled');
    $('butto').value = "Login!";

    var retorno = transp.responseText.evalJSON(true);
    var msg = $('erro');
    var retur;

    if (!retorno.login) {
	msg.innerHTML = retorno.erro;
	msg.style.display = 'block';
    } else {
	window.location = retorno.redirecionar;
	
	msg.innerHTML = 'Redirecionando...';
	msg.style.display = 'block';
    }
}

Valeu...

IPB Skin By Virteq