=]
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 <img src='http://forum.wmonline.com.br/public/style_emoticons/<#EMO_DIR#>/envelope.gif' class='bbc_emoticon' alt='(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é
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{ }
}
}
// 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...










