Ext的ajax和submit

1.submit

form.getForm().submit({

success:function(form,action){

Ext.Msg.alert('信息',action.result.msg);

},

failure:function(){

Ext.Msg.alert('错误','操作失败!');

}

});

在上面的代码中,success和failure各自对应一个函数,与直接使用Ajax有些不同:

a.函数中传入的参数不一样:第一个参数是form,第二个参数是action。

b.触发的条件不同。

Ext.lib.Ajax中,判断究竟是调用success还是failure的条件与业务无关。如果Http响应成功,就执行success;如果出现404或者500错误,就执行failure.

form中的success和failure则是与业务相关的,只有后台响应为true或者响应的JSON中包含success:true时,才执行success()函数。不过,这样以来failure()函数就复杂了,如何判断是连接失败,还是业务上出了问题呢?为了区分它们,Ext默认规定:如果响应的JSON中success不是true,并且响应的JSON中包含errors:{},那么就认为是业务错误;如果不包含errors:{},就认为是连接失败,当业务错误时,用this.failureType=Ext.form.Action.SERVER_INVALID;标记,可以通过action.failureType进行判断。

这里就是封装的结果,第一个参数是form对象,如果想实现表单的功能,直接使用这个form参数便可。例如,想在提交一次之后清空所有的数据,直接用form.reset()就行了,第二个参数是响应信息,action.result给我们提供了一个简易通道,这样省去了先获得responseText再转换成JSON的麻烦,现在可以直接从它里边返回的JSON数据了。比如后台返回的信息就可以直接通过action.result.msg获得。

2.单纯Ajax

表单自身的submit就使用了Ajax方式。不过,如果你想进一步控制表单里的数据,那么调用Ajax也是一个不错的选择。

既然是使用外部的Ajax,我们就只需要知道如何从中把字段的数据取出来,有以下几种方式。

* form.getValues()函数:它有一个参数,如果参数是true,就返回json组装的字符串;如果是false,就返回json对象,对应其中每个字段的名称和值。默认是false.

* findField()函数:它可以获得表单里的控件。例如,我们现在有一个TextField,名称是text,那么就可以通过下面的方式获得。

var text=form.getForm().findField('text');

我们使用最简单的getValues(true)函数来配合Ajax,用getValues(true)获得数据,然后用Ajax传递给后台,最后判断回调,代码如下:

handler:function(){

var text=form.getForm().findField('text');

Ext.lib.Ajax.request({

method:'POST',

url:'xxx.jsp',

success:function(response,opts){

var result=Ext.decode(response.responseText);

Ext.Msg.alert('信息',result.msg);

}

params:form.getForm().getValues(true)

});

}

使用form.getValues(true)是需要注意的是,我们得到的字符串并不是使用Ext.decode()编码后的json格式字符串,而是name=value的形式,无需处理就可以发送给后台。不过也出现了一个问题,因为里边包含了”=“和”&“,无法使用encodeURIComponent()函数对它进行编码,这样以来,如果参数中包含中文就不能使用GET发送数据了,否则会出现乱码,实际应用中还需要权衡使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值