本篇主要介绍一下ExtJs常用的几个对JS语法的扩展支持,包括Ajax封装,函数事件操作封装,还有扩展的常用函数等。Ajax服务端交互式操作是提交到.NET MVC。后续服务端交互都采用这一方式实现。
一、ExtJs中的Ajax:Ext.Ajax.request
通过客户端向服务端发送Ajax请求,可以“直接”调用MVC的action方法,并传递参数,action返回值可以是普通字符串,也可以是json对象。请求可以添加自定义头信息。看下面例子:
1.异步请求,发送自定义请求头:
html页面如下:
[html]
1
2
3
4
|
< h1 >Ajax服务端请求</ h1 >
< div class = "content" id = "div1" >
< div >一共发起了< span id = "span1" style = "color:Red" >0</ span >次请求。</ div >
</ div >
|
我们先通过一个按钮单击事件触发ajax请求,服务端返回string到客户端,异步请求时,为请求添加自定义头“userHeader”,并在服务端获取。如下是js代码:
[Js]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
Ext.onReady( function () {
new Ext.Button({
renderTo: "div1" ,
text: "后台Ajax提交" ,
handler: function () {
Ext.Ajax.request({
url: 'Ajax_Func1' ,
headers: {
'userHeader' : 'userMsg'
},
params: { a: 10, b: 20 },
method: 'GET' ,
success: function (response, options) {
Ext.MessageBox.alert( '成功' , '从服务端获取结果: ' + response.responseText);
},
failure: function (response, options) {
Ext.MessageBox.alert( '失败' , '请求超时或网络故障,错误编号:' + response.status);
}
});
},
id: "bt1"
});
});
|
服务端MVC接受请求的action代码:
[C#]
1
2
3
4
5
|
public ContentResult Ajax_Func1( int a, int b)
{
string userHeaderMsg = Convert.ToString(Request.Headers[ "userHeader" ]);
return Content((a + b).ToString() + ",userHeader:" + userHeaderMsg);
}
|
然后我们在火狐中调试:自定义请求头已被添加。
查看执行结果:
2.异步请求,返回json:
如果要返回json到客户端,MVC需要使用JsonResult的acton,自动将C#对象转换为json格式。客户端代码如下:
[Js]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
Ext.onReady( function () {
new Ext.Button({
renderTo: "div1" ,
text: "后台Ajax提交方式2返回JSON" ,
handler: function () {
Ext.Ajax.request({
url: 'Ajax_Func2' ,
params: { n: 10 },
method: 'POST' ,
callback: function (options, success, response) {
if (success) {
var responseJson = Ext.JSON.decode(response.responseText);
Ext.Msg.alert( "成功" , options.params.n + "的阶乘是:<font color='red'>" + responseJson.n1 + "</font><br />"
+ options.params.n + "的累加是:<font color='red'>" + responseJson.n2 + "</font>" );
} else {
Ext.Msg.confirm( '失败' ,
'请求超时或网络故障,错误编号:[' + response.status + ']是否要重新发送?' , function (btn) {
if (btn == 'yes' ) {
Ext.Ajax.request(options);
}
});
}
}
});
}
});
});
|
服务端代码:
[C#]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public JsonResult Ajax_Func2( int n)
{
int n1 = 1;
int n2 = 0;
for ( int i = 1; i <= n; i++)
{
n1 *= i;
n2 += i;
}
var data = new
{
n1 = n1,
n2 = n2
};
return Json(data, JsonRequestBehavior.AllowGet);
}
|
查看执行结果,我们先看看火狐调试响应的结果,可以查看返回的json内容:
界面执行结果:
3.异步文件上传
ExtJs通过强大的内部封装,使ajax请求看起来可以直接提交二进制流数据。每当提交文件数据时,ExtJs会自动创建iframe,在iframe中提交。提交完成后又自动移去,一切显得天衣无缝。下面演示一个通过异步请求无刷新文件上传的例子:
[html]
1
2
3
4
5
6
7
|
< h1 >Ajax文件上传</ h1 >
< div class = "content" id = "div2" >
< form id = "form1" >
请选择文本文件:< input type = "file" name = "file" />
< input type = "button" id = "button1" value = "上传" />
</ form >
</ div >
|
[Js]
1
2
3
4
5
6
7
8
9
10
11
|
Ext.get( "button1" ).on( "click" , function () {
Ext.Ajax.request({
url: "Ajax_FileUp" ,
isUpload: true ,
form: "form1" ,
success: function (response) {
Ext.MessageBox.alert( "上传成功,文本文件内容:" , response.responseText);
}
});
});
|
[C#]
1
2
3
4
5
6
|
public ContentResult Ajax_FileUp(HttpPostedFileBase file)
{
System.IO.StreamReader r = new System.IO.StreamReader(file.InputStream, System.Text.UTF8Encoding.Default);
var str = r.ReadToEnd();
return Content(str);
}
|
提交后我们发现,上传的文本文件内容已经被正确读取。
4.异步请求事件
当发起ajax请求之前,可以监听beforerequest事件,本例每当发起ajax事件时,都会把计算器+1:
[Js]
1
2
3
|
var ajaxCount = 0;
Ext.Ajax.on( 'beforerequest' , function () { Ext.get( "span1" ).update(++ajaxCount) }, this );
|
这样,每当ajax发起就可以被记录,可用作日志等。
二、元素对象Ajax式更新:Ext.Updater,[已弃用]
ExtJs为我们提供了异步方式更新dom元素内容的支持。这可以用在一些异步交互性比较强的地方,例如webgame等。我们来看看具体实现方式。
我们先在视图中写这样的html:
[html]
1
2
3
|
< div id = "div1" title = "d1" style = "width:50px; height:50px; position:absolute; background-color:Green; top:100px" >1</ div >
< div id = "div2" >2</ div >
< form id = "form1" >< input id = "a" name = "a" value = "20" />< input id = "b" name = "b" value = "50" /></ form >
|
1.单个元素的及时更新
现在,我要通过c#在服务端计算a+b的值,然后将结果填到div1元素里面:
[Js]
1
2
3
4
|
Ext.get( "div1" ).getUpdater().update({
url: "Ext/UpdaterFunc" ,
params: { a: 10, b: 3 }
});
|
[c#]
1
2
3
4
|
public ContentResult UpdaterFunc( int a, int b)
{
return Content( "a+b=" + (a + b));
}
|
页面加载后,将自动更新div1。再看看另外一种写法:
[Js]
1
2
3
4
5
6
|
Ext.get( "div1" ).load({
url: "Ext/UpdaterFunc" ,
scripts: true ,
params: { a: 10, b: 47 },
text: "请等待..."
});
|
2.通过提交表单更新
[Js]
1
|
Ext.get( "div1" ).getUpdater().formUpdate( "form1" , "Ext/UpdaterFunc" );
|
效果一样,只不过提交的参数来源于表单,参数名为对应的name值。
3.周期性更新
[Js]
1
2
3
|
var up = new Ext.Updater( "div1" );
up.startAutoRefresh(5, "Ext/UpdaterFunc" , { a: 10, b: 47 });
|
这段代码运行后将每隔5秒钟更新一次div1,用于需要适时核对服务端和客户端状态的情形。
分享到:
相关推荐
主要介绍了ExtJs的Ext.Ajax.request实现waitMsg等待提示效果,需要的朋友可以参考下
2. 对ExtJs的态度 3 3. Ext.form概述 4 4. Ext.TabPanel篇 5 5. Function扩展篇 7 6. Ext.data.Store篇 10 7. Ext.data.JsonReader篇一 12 8. Ext.data.JsonReader篇二 15 9. Ext.data.HttpProxy篇 19 10. Ext.data....
2. 对ExtJs的态度 3 3. Ext.form概述 4 4. Ext.TabPanel篇 5 5. Function扩展篇 7 6. Ext.data.Store篇 10 7. Ext.data.JsonReader篇一 12 8. Ext.data.JsonReader篇二 15 9. Ext.data.HttpProxy篇 19 10. Ext.data....
extjs多选下拉框,Ext.ux.form.LovCombo,extjs 以修复多选下拉框火狐下取不到值的问题,火狐下div不显示背景色的问题
第三章 Ext.Ajax 对ajax的支持 23 一、ExtJs中的Ajax:Ext.Ajax.request 23 二、元素对象Ajax式更新:Ext.Updater,[已弃用] 29 第四章 Ext.XTemplate 模板 31 一、使用标签tpl和操作符for 33 二、在子模板的范围内...
该ext.jsb2文件是ExtJS3.4.0中的,因ExtJS4.0.0中没有这个文件,但可以与4.0.0版本共用。
Extjs4 comboboxTree下拉树型菜单,完美支持多选、单选,绝对好用。来源于网络,稍作修改。
分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、对Ajax的支持...
主要用例子说明extjs4的form表单的运用,其中有表单属性说明,表单控件运用说明如: title:'表单', //表单标题 bodyStyle:'padding:5 5 5 5', //表单边距 height:120, //表单高度 width:200, //表单宽度 ...
EXTjs的上传组件
分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、对Ajax的支持...
3、Ext.ux.upload.Button 4、Ext.ux.toggleslide.ToggleSlide 5、Ext.ux.container.ButtonSegment 6、Ext.ux.grid.plugin.RowEditing 7、Ext.ux.grid.plugin.DragSelector 8、Ext.ux.grid.plugin.SortMenu 9、Ext.ux...
关于这个原因有很多种,我只说下我遇到的 我这样 写Store来复用的 代码如下: DocStore = Ext.extend(Ext.data.Store,{ initComponent:function(){ this.proxy = new Ext.data.HttpProxy({url:this.url}); this....
extjs 可编辑的表格树,每个单元格自定义编辑组件,可以自适应列宽,只有源码与例子,运行实例要修改路径,不然图片不能显示,注意etree.jsp的js引入路径...支持Ext2.x以上版本 如运行不了EmailTo : codeme9@gmail.com
ExtJS tooltip功能组件实例
NULL 博文链接:https://maoyi606.iteye.com/blog/1782825
ExtJS4+Accordion+SERVLET/STRUTS2+JSON+Ext.tree.Panel实例
NULL 博文链接:https://atian25.iteye.com/blog/1019910
Ext Extjs 禁止文本和日期编辑 ExtJS中动态设置TextField的readOnly属性