为什么我的form提交后接收不到后台action返回的json数据

hunterbin 2009-05-12

我的form是这样的

var leavePanel = new Ext.FormPanel({
	 		id:'leavePanel',
	 		//url:'LoginAction.action',
	 		frame:true,
	 		labelWidth:80,
	 		fileUpload:true,
	 		buttonAlign:'left',
	 		buttons:[{
	 			text:'提交申请',
	 			type:'submit',
	 			handler:function(obj){
	 				var note = Ext.get('context').getValue();//获得一些输入框的值
	 				var toUser = Ext.get('todepartment').getValue();
	 				var toDep = Ext.get('todepartment').getValue();
	 				var fromUser ='';
	 				if(leavePanel.getForm().isValid())
	 				{
	 					leavePanel.getForm().submit({
	 						url:'myApplyAction.action',//后台的action
	 						params:{note:note,toUser:toUser,toDep:toDep,fromUser:fromUser},
	 						waitTitle:'提示',
	 						method:'POST',
	 						waitMsg:'正在提交中,请稍候....',
	 						succcess:function(form,action){
	 							alert('提交申请成功');
	 						},
	 						failure:function(from,action){
	 							alert('提交申请失败');
	 						}
	 					})
	 				}
	 				
	 			}
	 		},{
	 			text:'重置',
	 			handler:function(){
	 				leavePanel.getForm().reset();
	 			}
	 		}]
	 	})

 后台是一个struts2的action,使用了Json-plugin,返回一个json格式的数据,action的配置如下:

<action name="myApplyAction" class="com.oa.action.LeaveApplyAction">
    	<result name="success" type="json"/>
    </action>

 可以测试到这个action返回的json数据格式如{"success":true}

但不知道为什么我js里的两个回调函数

succcess:function(form,action){
alert('提交申请成功');
},
failure:function(from,action){
alert('提交申请失败');
}
都不执行,用ff观察表单提交后,数据确实提交到后台了,但前台好像没有接受到后台返回的json,一直处在waitMsg的状态。

高手们看下我哪里出错了

我后台返回的{"success":true}json格式应该没错吧,应该可以给前台的success和failure两个回调函数识别到吧?

fourfire 2009-05-12
后台的代码呢?
hunterbin 2009-05-12
后台代码是这样的,只对success属性进行json转化
public class LeaveApplyAction extends ActionSupport {

	private String note;
	
	private String toDep;
	
	private String toUser;
	
	private String fromUser;
	
	private LeaveService service;
	
	private boolean success = false;

	
	public boolean getSuccess() {
		return success;
	}

	public void setSuccess(boolean success) {
		this.success = success;
	}

	@JSON(serialize=false)
	public String getFromUser() {
		return fromUser;
	}

	public void setFromUser(String fromUser) {
		this.fromUser = fromUser;
	}

	@JSON(serialize=false)
	public String getNote() {
		return note;
	}

	public void setNote(String note) {
		this.note = note;
	}

	@JSON(serialize=false)
	public String getToDep() {
		return toDep;
	}

	public void setToDep(String toDep) {
		this.toDep = toDep;
	}

	@JSON(serialize=false)
	public String getToUser() {
		return toUser;
	}

	public void setToUser(String toUser) {
		this.toUser = toUser;
	}

	@JSON(serialize=false)
	public LeaveService getService() {
		return service;
	}

	public void setService(LeaveService service) {
		this.service = service;
	}

	@Override
	public String execute() throws Exception {
				if(!this.note.equals("") && !this.fromUser.equals("") && !this.toDep.equals("") && !this.toUser.equals(""))
		{
			this.success = service.applyForLeave(this.note, this.fromUser, this.toDep, this.toUser);
			
		}
		return SUCCESS;
	}

hunterbin 2009-05-12
那个execute()方法的if判断贴漏了点,不过不影响
hunterbin 2009-05-12
service.applyForLeace()方法的参数也漏了点,这方法返回一个boolean
hunterbin 2009-05-12
终于弄好了,我把那个form里的fileUpload:true去掉就可以了
不知道这是为什么,知道的高手解释下  
hunterbin 2009-05-12
而且开始有fileUpload:true时,中文参数传到后台是乱码的
去掉后也没有乱码了,看来要先去了解下Ext的fileUpload机制
shameant 2009-05-12
fileLoad:true 会不会把你的form 封装成文件流

没用过ext,漂流党...
qixiaopeng 2009-05-13
去掉 fileUpload:true 曾经遇到过类似问题,就这样解决的
devilyard 2012-12-26
后台返回 的数据类型一定要是text/html
Global site tag (gtag.js) - Google Analytics