Foro

Llenar formulario con información del servidor

0
Estoy practicando este Framework y me entrampé queriendo cargar datos en un formulario. La idea es que los valores se carguen desde el servidor, en este caso escogí JSON y que mediante parámetros se puedan cargar valores en forma dinámica. Ayuda por favor, gracias El java sctript es el siguiente:
Ext.ns('llenar.formulario.tutorial');     
Ext.BLANK_IMAGE_URL = '../ext3/resources/images/default/s.gif';   
llenar.formulario.tutorial.FormTutorial = {  
    init: function(){  
    	var mipanel = new Ext.FormPanel({
	        frame: true,
	        title:'JSON Form',
	        labelAlign: 'right',
	        labelWidth: 85,
	        width:340,
	        waitMsgTarget: true,
			reader : new Ext.data.JsonReader(
				{  	root: "results",
					success: true,
					idProperty: "id_reader"
		        }, 
				[	{name: 'agno'},
	                {name: 'mes'},
	                {name: 'rut_empresa'}
	        	]
			),
			items: [ 
				new Ext.form.FieldSet({
					title: 'Contact Information',
	                autoHeight: true,
	                defaultType: 'textfield',
					items: [
						{ fieldLabel: 'Año', name: 'agno', width:190 },
						{ fieldLabel: 'Mes', name: 'mes', width:190},
						{ fieldLabel: 'Rut', name: 'rut_empresa', width:190 }
					]
				})
			]
		});
	    mipanel.addButton('Load', function(){
	        mipanel.getForm().load({url:'example1.php',params: {task:'selectRestricted'}, waitMsg:'Loading'});
	    });
	    mipanel.render('example1');
	}     
}    
Ext.onReady(llenar.formulario.tutorial.FormTutorial.init,llenar.formulario.tutorial.FormTutorial);
y el PHP es el siguiente.
<?php   
$task = ($_POST['task']) ? ($_POST['task']) : null;
switch($task){
    case "checkRestricted":
        checkRestricted();
        break;
    case "checkNotRestricted":
        checkRestricted();
        break;
    default:
        echo "{failure:true}";
        break;
}
   
function checkRestricted() 
{
	echo '({"results":{"agno":"2001","mes":"9","rut_empresa":"61216000"}})';
}
function checkNotRestricted() 
{
	echo '({"results":{"agno":"2009","mes":"12","rut_empresa":"96951933"}})';
}
?>
0
pero que problemas te da?? que no hace?? que error te da el firebug?? todo esto para tener una mejor idea de donde puede estar el problema.. y seguro obtener ayuda pronto salu2 Crespo
0
Todo bien hasta dar click sobre el boton Load. Luego la Respuesta del firebug es: "{failure:true}" y se queda eternamente "Loading" El firebug me indica en Envio: "task selectRestricted" La idea es que se muestren en el formulario los datos devueltos por el archivo PHP. Gracias
0
acabo de darme cuenta que tenía mal referenciado task lo modifique por "checkRestricted" y ahora el firebug me da: "({"results":{"agno":"2001","mes":"9","rut_empresa":"61216000"}})" Pero no me carga los datos sobre el formulario. Continuo con el problema.
0
lo que modifique fue :
	    mipanel.addButton('Load', function(){
	        mipanel.getForm().load({url:'example1.php',params: {task:'checkRestricted'}, waitMsg:'Loading'});
	    });
0
hola que tal mira lo que te falta es en la respuesta que venga un succes tambien
return ('{success:true,cmd:"cargar",data:' .$this->toObjeto(). '}');
la opcion de "cdm" no importa pero yo la utilizo para saber de que accion se trata
0
puse el success pero nada. creo que falta algún método en el javascript. Aún no logro cargar campos al formulario desde el servidor. Le cuento que ya he trabajado con grillas que cargan datos desde el servidor y combox tambien. Pero no he logrado dar con algún ejemplo como el que estoy construyendo. En <!-- w -->www.extjs.com<!-- w --> hay algo parecido pero con XML y no es para carga dinámica de datos. [url]http://www.extjs.com/deploy/dev/examples/form/xml-form.html[/url] Muchas gracias por ayudarme. pronto voy a poner lo que he desarrollado en una web para que todos vean mis ejemplos.
0
el servidor tiene que responder con el siguiente formato para que te funcione correctamente:
{
 "success": true, //<--obligatorio
 "data": { //<--- aqui viene la información
  "field_id_1": "Field 1 Value", // <--- id : value
  "field_id_2": "Field 2 Value"
 }
}
saludos
0
Hice el cambio en el PHP pero no carga los datos al formulario. El PHP me está devolviendo: {'success': true, 'data':{'agno':'2001','mes':'9','rut_empresa':'61216000'}} <!-- s:oops: --><!-- s:oops: --> aún no doy con el problema. Mil Gracias por su ayuda. el js es:
Ext.ns('llenar.formulario.tutorial');  
   
Ext.BLANK_IMAGE_URL = '../ext3/resources/images/default/s.gif';
   
llenar.formulario.tutorial.FormTutorial = {  
    init: function(){  
    	var mipanel = new Ext.FormPanel({
	        frame: true,
	        title:'JSON Form',
	        labelAlign: 'right',
	        labelWidth: 85,
	        width:340,
	        waitMsgTarget: true,
			reader : new Ext.data.JsonReader(
				{  	root: "data",
					success: true,
					idProperty: "data"
		        }, 
				[	{name: 'agno'},
	                {name: 'mes'},
	                {name: 'rut_empresa'}
	        	]
			),
			items: [ 
				new Ext.form.FieldSet({
					title: 'Contact Information',
	                autoHeight: true,
	                defaultType: 'textfield',
					items: [
						{ fieldLabel: 'Año', name: 'agno', width:190, id:'agno' },
						{ fieldLabel: 'Mes', name: 'mes', width:190, id:'mes'},
						{ fieldLabel: 'Rut', name: 'rut_empresa', width:190, id:'rut_empresa' }
					]
				})
			]
		});
		
	    mipanel.addButton('Load', function(){
	        mipanel.getForm().load({url:'example1.php',params: {task:'checkRestricted'}, waitMsg:'Loading'});
	    });
	
	    mipanel.render('example1');
	}     
  
}  
   
Ext.onReady(llenar.formulario.tutorial.FormTutorial.init,llenar.formulario.tutorial.FormTutorial);
y el PHP es:
<?php   
$task = ($_POST['task']) ? ($_POST['task']) : null;
switch($task){
    case "checkRestricted":
        checkRestricted();
        break;
    case "checkNotRestricted":
        checkNotRestricted();
        break;
    default:
        echo "{failure:true}";
        break;
}   
    
function checkRestricted() 
{
	echo "{'success': true, 'data':{'agno':'2001','mes':'9','rut_empresa':'61216000'}}";
}
function checkNotRestricted() 
{
	echo '{"success": true, "data":{"agno":"2008","mes":"12","rut_empresa":"96967560"}}';
}
?>
Luego de dar click a load el firebug me devuelve lo que se ve en esta imagen, pero no se cargan los datos al formulario, que es lo que ando buscando como resultado.
0
<!-- s:D --><!-- s:D --> Por fin di con el resultado esperado! Tenia mal el resultado del JSON como lo hice a mano para el ejemplo y no utilicé el decoder me faltó indicarle que era un arreglo. Osea los brakets [ y ]. cambiando la devolucion: echo "{'data':{'agno':'2001','mes':'9','rut':'61216000'}}"; por: echo "{'data':[{'agno':'2001','mes':'9','rut':'61216000'}]}"; se carga el formulario automáticamente. De hecho no es necesario el "success" aunque un buen programador siempre debería utilizarlo para validaciones.
0
Oh ya... ya entendí... como el formulario no es un arreglo no usa los [ ]... con razon no me funkaba, en cambio para el grid si los necesito, gracias Crysfel...
0
Claro que si uso el mismo resultado para llenar un grid ese si me lo llena, pero si es para llenar formulario ahi no se llena, me llega VACIO las variables en este caso TDEV...
0
La manera correcta para llenar el formulario es como comentas en tu primer post, donde no metes dentro de un arreglo el objeto con la información a cargar
0
se que este tema es viejo, pero Alguien tiene idea de porque a mi me pasa al reves que a AJIMENEZ me funciona asi... echo '{"success":"true","data":{"TDEV":"sdfsdfdsfgds","tcosto":"151.67000","Anio":"2011"}}'; pero asi no... echo '{"success":"true","data":[{"TDEV":"sdfsdfdsfgds","tcosto":"151.67000","Anio":"2011"}]}'; estoy usando extjs 3.1 creo... Gracias!

¿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.