ExtJs4 笔记(3) Ext.Ajax 对ajax的支持

2024-04-10 06:38
文章标签 笔记 支持 extjs4 ajax ext

本文主要是介绍ExtJs4 笔记(3) Ext.Ajax 对ajax的支持,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本篇主要介绍一下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;
//每当Ajax请求发起时触发:
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,用于需要适时核对服务端和客户端状态的情形。


作者:李盼(Lipan)
出处: [Lipan] ( http://www.cnblogs.com/lipan/)
版权声明:本文的版权归作者与博客园共有。

这篇关于ExtJs4 笔记(3) Ext.Ajax 对ajax的支持的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/890319

相关文章

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个