Ext FormPanel submit 提交与Ext.Ajax.request提交的区别

Ext FormPanel submit 提交与Ext.Ajax.request提交的区别(转)
前置:
后台成功返回字符串:{success:true,msg:'操作成功!'}
后台失败返回字符串:{success:false,errors:'操作失败!'}
当submi提交时,action不存在后台返回下图字符串:
 
下面所有的action不存在,是指url路径不存在
 
FormPanel 提交代码如下:
var G = new Ext.form.FormPanel({})
 
G.getForm().submit({//客户端的数据提交给服务器
                    url:wayfoon.MMS.DataPage +'/ext2Upload.action',   
                    //waitMsg:"正在提交表单数据,请稍候。。。。。。",    
                    failure:function(form, action){
                        Ext.MessageBox.alert('警告', action.result.errors);       
                    },     
                    success: function(form, action){
                        Ext.MessageBox.alert('信息', action.result.msg);
                     }    
                });
根据后台json 字符串 success的值(ture/false)自动选择failure或者success,也可以捕捉前台错误(走failure流程),比如数据非法而被强制提交时,
后台字符串需要通过action.result 转成json 字符串,供我们按习惯的方法使用,
 
对于后台异常处理,比如 action不存在,则无能为力,会出JavaScript错误,
错误处,ext-all.js的代码
this.decode = function(json) {
        //alert(json);
  return eval("(" + json + ")")
 }
原因是无法将上图(如图)的字符串转成json字符串,导致无法判断走哪个流程,而正常情况下,返回的是 {success:true,msg:'操作成功!'}或其他。
试了将上面代码使用try{}catch (){} 还是不能解决JavaScript错误,我们一般可以避免这种后台错误,如果非得解决的话,不知道有没有好的解决方法。
 
 
Ext.Ajax.request提交代码如下:
Ext.Ajax.request({
    url:wayfoon.MMS.DataPage+'/cpSMS.action?action=submitSMS',
    method:'POST',
    params:'id='+id,
    success:function(form,action){
        var obj = Ext.util.JSON.decode(form.responseText);
        if(obj.success==true)
        {
            Ext.Msg.alert('提示',obj.msg);
            ds.reload();
        }
        else
        {
            //Ext.Msg.alert('提示',obj.errors);
            Ext.Msg.alert('提示',obj.msg);
        } 
    },
    failure:function(form,action){
        Ext.Msg.alert('警告','系统错误');
    }
});
后台字符串通过Ext.util.JSON.decode 转成json字符串
不能自动根据json字符串success的值来选择流程 ,需要根据obj.success的值来判断走哪个流程
 
该failure:可以捕捉系统异常,比如,数据未曾提交到后台或action 不存在,此时走failure 流程

你可能感兴趣的:(Ext FormPanel submit 提交与Ext.Ajax.request提交的区别)