[Solucionado] Ayuda con xml retornado por php
buenas, estoy haciendo un login mediante extjs y php, yo desde la función submit de mi js
le mando al php el usuario y la password, seguidamente en el php compruebo si existe y retorno una cadena con el texto xml si es error o si es ok, lo que quiero es coger el nodo resultado para saber si es ok o es error y asi porder mostrar el mensaje de error o redireccionar a la pagina de inicio del programa. Gracias
Aqui muestro el login.js y el login.php:
[u]LOGIN.JS[/u]
Ext.onReady(function(){
Ext.QuickTips.init();
var res = Ext.data.Record.create([
{name: 'resultado', mapping: 'resultado'}
]);
var reader = Ext.data.XmlReader({
totalRecords: "total",
record: "respuesta",
id: "id"
}, res);
/*var proxy = new Ext.data.HttpProxy({
method:'GET',
url: 'php/login.php'
});
this.store = new Ext.data.Store({
proxy: proxy,
reader: reader
});*/
var log = new Ext.FormPanel({
id: 'login',
renderTo: Ext.getBody(),
labelWidth: 75,
width: 350,
buttonAlign: 'right',
border: false,
bodyStyle: 'padding:10px 10px 0;',
defaults: {
anchor: '95%',
allowBlank: false,
selectOnFocus: true,
msgTarget: 'side'
},
defaultType: 'textfield',
items: [{
fieldLabel: 'Usuario',
name: 'usu',
blankText: "El campo usuario es requerido"
},{
inputType: 'password',
fieldLabel: 'Password',
name: 'pass',
blankText: "El campo password es requerido"
}],
buttons:
[{
text: 'Entrar',
handler: function(){
if(log.getForm().isValid()){
var sb = Ext.getCmp('form-statusbar');
sb.showBusy('Comprobando Datos...');
log.getEl().mask();
log.getForm().submit({
method:'GET',
url:'php/login.php',
success: function(){
//MI DUDA ESTA AQUI, COMO RECOGERLO
//Y BUSCAR EL NODO RESULTADO CON IF
},
failure:function(form, action){
log.getForm().reset();
sb.showBusy('Insertar Datos');
sb.setStatus({
iconCls:'',
clear: true
});
log.getEl().unmask();
Ext.MessageBox.show({
title:'Error',
msg:'No se ha podido conectar al
servidor, inténtelo de nuevo',
buttons: Ext.MessageBox.OK,
icon: 'imagen_error'
});
}
})
}
}
},{
text:'Limpiar',
handler: function(){
log.getForm().reset();
}
}]
});
log.render('lg');
new Ext.Panel({
title: 'Iniciar Sesión',
renderTo: Ext.getBody(),
width: 350,
autoHeight: true,
layout: 'fit',
items: log,
bbar: new Ext.StatusBar({
id: 'form-statusbar',
defaultText: 'Insertar Datos',
plugins: new Ext.ux.ValidationStatus({form:'login'})
})
});
});
[u]LOGIN.PHP[/u]
<?php
include ("conexion.php");
include ("logbilling.php");
$cnx = conectar();
$salida_xml = "<?xml version=\"1.0\" encoding = \"ISO-8859-1\"?>\n";
$usu = $_GET['usu'];
$pass = $_GET['pass'];
$sql = "SELECT i_id_cliente FROM cliente WHERE V_USUARIO_CLI = '".mysql_real_escape_string($usu)."' AND V_PASSWORD_CLI = '".mysql_real_escape_string(md5($pass))."';";
$res = mysql_query ($sql);
LogToFile("USU: ". $usu . " PASS: ". $pass . "Numero Res: " . mysql_num_rows($res));
if(mysql_num_rows($res) > 0)
{
$salida_xml .= "<respuesta>\n";
$salida_xml .= "<total>1</total>\n";
$salida_xml .= "<id>1</id>\n";
$salida_xml .= "<res>\n";
$salida_xml .= "\t<resultado>Ok</resultado>\n";
$salida_xml .= "</res>\n";
$salida_xml .= "</respuesta>";
mysql_close($cnx);
return $salida_xml;
}
else
{
$salida_xml .= "<respuesta>\n";
$salida_xml .= "<total>1</total>\n";
$salida_xml .= "<id>2</id>\n";
$salida_xml .= "<res>\n";
$salida_xml .= "\t<resultado>Error</resultado>\n";
$salida_xml .= "</res>\n";
$salida_xml .= "</respuesta>";
mysql_close($cnx);
return $salida_xml;
}
?>
El callback "success" recibe dos parámetros, el mismo formulario y un action.
success: function(form, action) { console.debug(action.result); //checa que te imprime en la consola }el código anterior imprime en la consola de firefox la información retornada por el server. saludos
Ya lo e solucionado, muchas gracias de todas formas:
El success y el failure lo he quitado, cuando entra en el isvalid lo mando a una funcion que llama al php y hay comparo si trae ok o error y realizo su correspondiente accion:
Code:
...............
handler: function(){
if(log.getForm().isValid()){
var sb = Ext.getCmp('form-statusbar');
sb.showBusy('Comprobando Datos...');
log.getEl().mask();
var usuValue = usuario.getValue();
var passValue = password.getValue();
validar(usuValue, passValue, sb, log);
}
...........
Code Funcion Validar:
function validar(usu, pass, sb, log)
{
var conn = new Ext.data.Connection;
sb.showBusy('Comprobando Datos...');
setTimeout(function(){
conn.request({url: 'login.php', params: {usu: usu, pass: pass},
callback: function(options, success, response)
{
if (success)
{
var xmlRespuesta = response.responseXML;
var nodosElementos =
xmlRespuesta.getElementsByTagName('resultado');
atributo = nodosElementos[0].getAttribute('success');
if (atributo == 'Error')
{
log.getForm().reset();
sb.showBusy('Insertar Datos');
sb.setStatus({
iconCls:'',
clear: true
});
log.getEl().unmask();
Ext.MessageBox.show({
title:'Error',
msg:'Usuario o Password Incorrectos',
buttons: Ext.MessageBox.OK,
icon: 'imagen_error'
})
}
else
{
var url = 'index.html';
Ext.MessageBox.show({
msg: 'Accediendo al Sistema',
progressText: 'Accediendo al sistema',
width:300,
wait:true,
waitConfig: {interval:100},
animEl: 'botonIniciar'
});
setTimeout(function(){
location = url;
}, 3500);
}
}
}
});
}, 4000);
}
PD: El php tambien lo he cambiado para enviar atributos
¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook
Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.