Enviar data en Formato Json con BasicForm.submit
saludos a todos,
estoy tratando de enviar los parametros por post en formato json
pero no lo he logrado, con el Ext.Ajas.request si lo hace
no se como hacer lo mismo para enviar la data al hacer submit con el objeto BasicForm
con Ext.Ajax.request
Ext.Ajax.request({ disableCaching: false, url: 'Default.aspx/GetDataAjax', method: 'POST', params: "{'nombre': 'Fulanito','apellido': 'Cabrales'}", headers: { 'Content-Type':'application/json', 'charset' : 'utf-8' }, success: function(response,options) { var msn = eval(Ext.util.JSON.decode(response.responseText)); Ext.Msg.alert(msn.d); }, failure: function(response,options) {alert('fallo');} });al hacer submit con desde el formulario de un Ext.FormPanel
new Ext.FormPanel({ title: 'formulario', renderTo: 'form', id: 'user-form', width: 500, autoHeight: true, url: 'Default.aspx/GetDataAjax', items: [ { xtype: 'textfield', fieldLabel: 'nombre', name: 'nombre', id: 'f-nombre', value: 'Fulanito' }, { xtype: 'textfield', fieldLabel: 'apellido', name: 'apellido', id: 'f-apellido', value: 'de Tal' } ], buttons: [ { text: 'Enviar', handler: function() { Ext.getCmp('user-form').getForm().submit({headers: { 'Content-Type':'application/json', 'charset' : 'utf-8' }}); } } ] });favor ver la imagen de lo que se envia en en el primer request con el Ext.Ajax y en el segundo request desde el basicform no se que parametro debo agregar, o a la funcion submit o a la configuracion del formpanel Gracias por su ayuda
por defecto no lo hace, siempre los envía por separado!! existen dos maneras de solucionarlo, la facil y la no tan fácil, tu decides.
1. Fácil - El método "submit" al final ejecuta una petición utilizando el objeto Ext.Ajax y las configuraciones que le pongas al método "submit" del basicform van a ser aplicadas al método "request" del objeto Ext.Ajax, entonces, la solución más sencilla es:
var bf = form.getForm(); var data = Ext.encode(bf.getValues()); bf.submit({ url : "tu-url.php", params : {data:data}, ..... });2. Solucion no tan facil - Necesitas sobre escribir el metodo "getParams" de la clase "Ext.form.Action" que es la responsable de generar los parametros a enviar, ahi podrias agregar algo como esto:
Ext.override(Ext.form.Action,{ getParams : function(){ var bp = this.form.baseParams; var p = this.options.params; if(p){ if(p.json){ p = {json:Ext.encode(Ext.applyIf(this.form.getValues(), bp))}; //<-- esto es lo que le agregue }else if(typeof p == "object"){ p = Ext.urlEncode(Ext.applyIf(p, bp)); }else if(typeof p == 'string' && bp){ p += '&' + Ext.urlEncode(bp); } }else if(bp){ p = Ext.urlEncode(bp); } return p; } });luego utilizas el submit y le envias la propiedad "json" para que se ejecute el if que le agregamos. saludos pd: no he probado el codigo, pero deberia funcionar.
el esta transformando la data en algun otro lugar, por que veo como se ejecuta la funcion, pero cuanod veo lo que se envia, sigo viendo la cadena
var1=val1&var2=val2...
no se en que momento hace eso, depuro el codigo y no entiendo en que momento vuelve a transformar los parametros
Creo que toca escribir una nueva clase action.XXXX
por que el problema esta es en la funcion run,
en la llamada
Ext.Ajax.request(Ext.apply(this.createCallback(o), { form:this.form.el.dom, // estos son los campos del formulario url:this.getUrl(isGet), method: method, headers: o.headers, params:!isGet ? this.getParams() : null, // parametros adicionales (baseParas del formpanel y params del parametro submit) isUpload: this.form.fileUpload }));el parametro form, convierte el formulario a una cadena url, y ese es el que quiero transformar realmente, por supuesto que si voy a enviar todo en json tambien debo modificar la funcion getParams que modifique los parametros adicionales (baseParams y parmas), para que devuelva un Json que se una con los campos del formulario. Sigo trabajando en eso!!! Gracias Stock
¿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.