当前位置: 代码迷 >> Ajax >> Ext.Ajax.request 与formPanel.getForm().submit() success的差别(转)
  详细解决方案

Ext.Ajax.request 与formPanel.getForm().submit() success的差别(转)

热度:762   发布时间:2012-09-04 14:19:30.0
Ext.Ajax.request 与formPanel.getForm().submit() success的区别(转)

formPanel提交方式

Ext.MessageBox.wait('正在提数据, 请稍侯 ...', '提示');
xxxxFormPanel.getForm().submit({
	timeout : 60,
	success : function(form, action) {
        // 业务成功
		Ext.MessageBox.updateProgress(1);
		Ext.MessageBox.hide();

	},
	failure : function(form, action) {
        // 业务失败
		Ext.MessageBox.updateProgress(1);
		Ext.MessageBox.hide();

		switch (action.failureType) {
			case Ext.form.Action.CLIENT_INVALID :
				Ext.Msg.alert('错误!', '存在未通过验证的数据!');
				break;
			case Ext.form.Action.CONNECT_FAILURE :
				Ext.Msg.alert('错误!', '连接错误!');
				break;
			case Ext.form.Action.SERVER_INVALID :
				Ext.Msg.alert('错误!', action.result.msg);
		}
	}
});

?

Ajax提交方式

	Ext.Ajax.request({
		url : ...,
		params : {
			...
		},
		success : function(response, opts) {
			var o = Ext.util.JSON.decode(response.responseText);
			if( o.success){
				// 业务执行成功
			} else{
				// 业务执行失败
			}
		},
		failure : function(response, opts) {
			// ? 此处怎么做,大家可以说说  :oops: 
		}
	});

?

?

另一种写法:

Extjs Ext.data.store 捕获加载数据的异常,并打印信息

new Ext.data.Store({
	proxy : new Ext.data.HttpProxy({
		url : basePath + '/fundAuditAction.do'
	}),
	reader : new Ext.data.JsonReader({
		totalProperty : 'total',
		root : 'root',
		successProperty : 'succeed',
		fields : [...]
	})
    ,successProperty: 'success' // 后台传输的标识。必须
	,listeners:{
		exception:function(dataProxy, type, action, options, response, arg) { 
			var o = Ext.util.JSON.decode(response.responseText);
			if(!o.success){
				Ext.Msg.alert('错误提示',o.message);
			}
        }
	}
});

?

二者都可以接收服务器端返回的如下json串:

{success:true/false,msg:'xxxx'}

?

?

?

如果success为true,对于formPanel提交方式,程序会进入success回调函数;对于Ajax提交方式,程序也会进入success回调函数。
而区别在于如果success为false,对于formPanel提交方式,程序会进入failure回调函数;而Ajax提交方式,程序依然会进入success回调函数。

总结:
success的true和false可以用来表示业务的成功或者失败。
1、在formPanel提交方式中,成功后的操作要在success回调函数中进行,失败后的操作在failure回调函数中进行;
2、在Ajax提交方式中,业务的成功失败都应该在success回调函数中进行操作,而true或者false以o.success获得(具体见代码及注释)。

?

?

?

Ext.Ajax.request 中success failure:

success参数表示响应成功后的回调函数。

failure参数表示响应失败后的回调函数。

注意,这里的响应失败并不是指数据库操作之类的业务性失败,而是指HTTP返回404或500错误,请不要把HTTP响应错误与业务错误混淆在一起。

?

?

好的做法:

在框架中加入异常的捕获(比如:拦截器),对异常进行在封装和定位,不同的异常代码表示不同的错误信息,对于EXT的异常提示会有很好的帮助?。

?

?

?

?

  相关解决方案