=]
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...